【发布时间】:2016-09-20 10:53:15
【问题描述】:
我正在使用 QT 5.7,由于我必须使用库,我需要将 QObject(的派生类)与 void 指针相互转换。
几个定义。我有一个只接受 void 指针的函数,而我的类派生自 QObject:
void oneFunction(void *obj);
class MyObj : public QObject
{
...
};
然后我创建并填充一个对象:
MyObj *ptr = new MyObj(parent);
ptr->.......
在某些时候,我将它转换为 void 指针,因为我必须将它传递给函数。此演员表是自动完成的:
oneFunction(ptr);
然后,一段时间后,我收到了我传递的指针,我需要将它转换回原来的类。指针未被函数修改:
void callbackFromOneFunction(void *theOldPointer)
{
MyObj *oldPtr = qobject_cast<MyObj*>(static_cast<QObject*>(theOldPointer));
if (oldPtr != nullptr)
{
... Now it's back, so use it
}
}
现在,整个过程正确吗?您是否发现了一些问题/泄漏?有没有更好的解决方案?
谢谢
【问题讨论】:
-
如果通过隐式转换从
MyObj*转换为void*,则需要将static_cast转换回MyObj*,而不是QObject*。仅当类型完全相同时才能保证往返。