【发布时间】:2011-12-04 05:43:13
【问题描述】:
我目前正在使用 Qt 和图形引擎,在 QGLWidget 实例的初始化期间,我需要将一些函数指针传递给我的引擎。
寻找回调的函数是:
virtual void Buffer::CreateCustom( byte* getsize, byte* makecurrent)
Qt 提供了一个makeCurrent function,但它既不是字节*也不是静态的。
我可以像这样写一个小包装函数:
void _stdcall MakeCurrent(void)
{
QGLContext::makeCurrent();
}
但它只意味着从 GLWidget 的实例中调用。我试图像这样创建一个类成员包装函数:
void _stdcall LEWidget::leMakeCurrent(void)
{
makeCurrent();
}
但是你只能在静态成员函数上提供函数指针。如果我这样做,我会收到以下错误:
错误 C2352: 'QGLWidget::makeCurrent' : 非法调用非静态成员函数。非静态成员引用必须相对于特定对象。
【问题讨论】:
-
不知道 Qt f/w..但是你看过 "boost::function" 和 "boost::bind" 吗?
-
嗯,在我看来,必须有一种本地的方式来做这件事。我一定是走错路了。
-
如果 Qt 期望 makeCurrent() 被“从 GLWidget 的实例中调用”,你应该遵循这个协议,否则回调很可能会在执行时失败。您可以使用下面 nacho4d 提供的链接进行操作。
-
是我还是 CreateCustom 被宣布真的,真的错了吗? byte* 是函数指针吗?