我最近使用MacPorts安装了Boost,意图在C++中进行一些Python嵌入.然后,我决定使用Python网站上的示例检查我是否正确配置了Xcode:
#include <boost/python.hpp>
using namespace boost::python;
int main( int argc, char ** argv )
{
try
{
Py_Initialize();
object main_module(handle<>(borrowed(PyImport_AddModule("__main__"))));
object main_namespace = main_module.attr("__dict__");
handle<> ignored(PyRun_String("print \"Hello, World\"",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr()));
}
catch( error_already_set )
{
PyErr_Print();
}
}
Run Code Online (Sandbox Code Playgroud)
它正确编译,但是当我启动它时,对attr()的调用会抛出异常,并且生成的错误消息是"TypeError:属性名称必须是字符串,而不是'str'".哪个可疑听起来像一个占位符.
我在Google上查了一下,但没有运气.
我在Leopard上使用Boost v1.39,Python 2.5和GCC 4.0.
我正在尝试为我的QGraphicsView使用自定义游标和预设游标的混合.在我的实现中,我们为视图创建了"模式"的概念.这意味着根据用户所处的"模式",左键单击或左键单击拖动会发生不同的事情.无论如何,这不是问题,只是上下文.
当我尝试更改每个模式的光标时出现问题.例如,对于模式1,我们想要显示常规箭头光标,但对于模式2,我们想要使用自定义像素图.graphicsview->viewport()->setCursor(Qt::QArrowCursor) 我们在切换到模式1和graphicsview->viewport()->setCursor(our custom cursor)模式2 时看起来很简单.除了它根本不起作用.
首先,光标不会更改为自定义光标.这是第一个问题.但是,如果通过另一个操作,图形视图的拖动模式设置为ScrollHandDrag,则一旦拖动操作完成,光标将切换到自定义光标.奇怪的.但情节变浓了......一旦我们切换到自定义光标,无论我们调用多少次,它都永远不会变回ArrorCursor setCursor(Qt::QArrowCursor).我是否在视口或图形视图本身上调用setCursor似乎并不重要.
所以,为了好玩,我graphicsview->unsetCursor()在我们想要更改光标之前添加了一个调用,这至少可以解决第二个问题.只要我们在它们之间做一点HandDragging,光标就会变好.更好,但肯定不是最佳的.但是应该注意,在视口上执行unsetCursor不起作用.它绝对必须在graphicsview上完成 - 无论我们是否在视口上设置光标.
为了完全修补问题,我在设置光标后添加了这两行:
graphicsview->setDragMode(QGraphicsView::ScrollHandDrag);
graphicsview->setDragMode(QGraphicsView::NoDrag);
Run Code Online (Sandbox Code Playgroud)
哪个有效,但你们加油!所以在这两个方法中发生了一些神奇的事情来修复问题,但是看了一下我看不到的代码.与拖动模式正在改变我想象的光标这一事实有关.
为了完整起见,我还应该提到触发模式更改的事情是使用已添加到场景中的QPushButton QGraphicsScene->addWidget().我不知道这与它有什么关系,但你永远不知道.
我希望有人能澄清为什么我需要做这些看似随机的电话.我不认为我在任何地方做错了什么.在此先感谢您的帮助.
编辑:这是一个实际的代码示例,其中包含如上所述的光标补丁.您可以从以下链接查看和/或下载它们.粘贴这里有点长.我包含了游标更改的框架,因为我有一种有趣的感觉,这在某种程度上很重要.
https://gist.github.com/712654
问题所在的代码是从第104行开始的MyGraphicsView.cpp.这是在图形视图中设置光标的位置.完全如上所述.
请记住,游标可以使用非常难看的补丁 - 或多或少.没有这些线条,您将非常清楚地看到上面帖子中列出的问题.
链接中还包含使用视图等的mainWindow的所有代码...唯一缺少的是我正在使用的图像.但是图像本身并不重要,任何16x16 png都可以.
首先,我使用的是.NET 4.
我正在尝试将一些文件写入包中,当我这样做时,我遇到了一些奇怪的事情:
using (var package = Package.Open(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
// do something with package
}
Run Code Online (Sandbox Code Playgroud)
Package是指System.IO.Packaging.Package.
奇怪的是,Package.Open方法抛出一个异常,说:
当访问是FileAccess.Read时,无法使用FileMode.Create,FileMode.CreateNew,FileMode.Truncate,FileMode.Append获取流.
我在2009年的Microsoft Connect上发现了一个旧的错误报告:http: //connect.microsoft.com/VisualStudio/feedback/details/392318/argumentexception-text-is-wrong
但它没有帮助.
那么,有人有个主意吗?
我在VB.Net中创建了一个30天试用期的程序.该程序在注册表中节省了首次启动该程序的时间,并且最后使用了该时间.由此我计算试验是否仍然有效.
问题是,非管理员用户可以访问的注册表中唯一的位置是HKEY_LOCAL_USER键.我需要为所有用户实施试用,否则用户可以使用新帐户并重置试用版.
我在哪里可以保存此信息,以便没有管理员权限的用户可以从该位置读取和写入?我还想将它保存在普通用户无法轻易找到的位置,并删除将重置试用版的文件.
谢谢
我正在阅读Essential COM并在本书的第2章遇到了一个宏'BASE_OFFSET',我并不真正理解它的语法或为什么这样做.
#define BASE_OFFSET(ClassName, BaseName) \
(DWORD_PTR(static_cast<BaseName*>(reinterpret_cast<ClassName*>(0x10000000))) - 0x10000000)
Run Code Online (Sandbox Code Playgroud)
谁能解释这个宏以及我们如何使用它?事实上,这本书使用了这个宏,但由于我不太了解它,我没有看到它的实际用法.非常感谢你提前.
我的 Plane 类有两个字段:
public Vector3 Norm; //normal vector
public double Offset; //signed distance to origin
Run Code Online (Sandbox Code Playgroud)
这是我用于交集的代码,不知道是否正确。我仔细检查了我的方程和所有内容,但我想从对此更有经验的人那里得到反馈。
public override Intersection Intersect(Ray ray)
{
// Create Intersection.
Intersection result = new Intersection();
// Find t.
double t = - (Vector3.Dot(Norm,ray.Start) + Offset) / (Vector3.Dot(Norm, ray.Dir));
if (t < 0) // the ray does not hit the surface, that is, the surface is "behind" the ray
return null;
// Get a point on the plane.
Vector3 p = ray.Start + t * ray.Dir; …Run Code Online (Sandbox Code Playgroud) 假设有这样的代码:
class CFoo
{
public:
CFoo()
{
iBar = new CBar();
}
private:
CBar* iBar;
};
....
CFoo* foo = new CFoo();
Run Code Online (Sandbox Code Playgroud)
执行上面的行时,将分配第一个内存来保存CFoo对象.但是如果新的CBar()行引发异常(由于内存不足),系统会自动解除分配先前分配给CFoo对象的内存吗?我认为它必须,但找不到任何明确的参考说明.如果没有,编码器将如何释放内存,因为它不会被分配给foo?
我有一个基类玩具和派生类Toy_remote_car和Toy_battery_car.
我这样做:
Toy** ptr;
ptr=new Toy*;
ptr[0]=new Toy_remote_car[1];
ptr[1]=new Toy_battery_car[1];/*this is completely wrong according to my teacher because i never created ptr[1]. Instead this is a misuse of memory according to him.*/
Run Code Online (Sandbox Code Playgroud)
上面的代码(ptr = new Toy*)正在创建一个类型为Toy(ptr [0])的指针,它包含派生类Toy_remote_car的对象.
现在我想写这样的代码:
- >不应预定义玩具类型指针的数量.
- >而我会调用add_toy函数,它会创建一个指向我想要的对象类型的ptr.此外,如果我再次调用add_toy函数,它不应该将数据分配给previos ptr,但它应该创建一个新的ptr.以下约定可能有所帮助:
ptr[0]=new Toy_remote_car[1];
/*we want to add more toys so add_toy function called. A check is applied.*/
/*The check checks that ptr[0] already contains a value so it creates another pointer ptr[1]*/
ptr[1]=new Toy_battery_car[1];
Run Code Online (Sandbox Code Playgroud)
- >此外,我将能够访问所有以前的数据.简而言之:
ptr[0]//contains one …Run Code Online (Sandbox Code Playgroud) 在visual c ++中接受下面的代码,g ++将生成错误:"类Derived没有任何字段名Base",它遵循标准?
template <class T>
class Base
{
public:
Base(){};
};
template <class T>
class Derived:public Base<T>
{
public:
Derived():Base(){}
};
Run Code Online (Sandbox Code Playgroud)
顺便说一句:都接受
Derived():Base<T>(){}
Run Code Online (Sandbox Code Playgroud)
所以,我会跟着gcc
检查文件是否存在,不创建文件并通过使用Mac库<.mach-o / dyld.h>或其他文件写入信息的最佳方法是什么?
c++ ×7
.net ×2
boost-python ×1
c ×1
c# ×1
com ×1
game-physics ×1
gcc ×1
macos ×1
macros ×1
memory-leaks ×1
new-operator ×1
package ×1
pointers ×1
python ×1
qt ×1
qt4 ×1
raytracing ×1
registry ×1
templates ×1