【发布时间】:2013-03-19 09:50:19
【问题描述】:
我在 Ubuntu 10.04 下使用 Qt 5.0.1,在我的应用程序中,我需要在运行时将 QSharedPointer 与适当的 dynamic_cast (object_cast) 转换一起使用。这些转换在运行时正确加载的共享对象中调用。我必须部署我的应用程序才能在具有 Ubuntu 10.04 操作系统的嵌入式计算机上运行它;这就是我在 Ubuntu 10.04 下使用 Qt 的原因。
如果我构建我的应用程序并在安装了 Qt 库的同一台机器上运行它,一切都会按预期工作。
但是,如果我在嵌入式计算机上运行应用程序,qSharedPointerDynamicCast(以及类似的 QSharedPointer::dynamicCast、qSharedPointerObjectCast 和 QSharedPointer::objectCast)会失败并返回空指针。我检查了两台机器是否具有相同的配置,除了 dynamic_cast/object_cast 问题之外,一切似乎都运行良好。
我认为这可能是 RTTI 问题,但是,经过广泛的谷歌搜索,我没有找到问题的解决方案。
【问题讨论】:
-
qSharedPointerObjectCast 使用 qobject_cast,qobject_cast() 函数的行为类似于标准 C++ dynamic_cast(),其优点是它不需要 RTTI 支持并且可以跨动态库边界工作。所以 RTTI 不必影响行为。
-
二进制包是否包含所有必要的qt库,包括qt插件?
-
感谢您的回复。我尝试同时使用 objectCast 和 dynamicCast。但是我认识到 objectCast 对一个类(比如 A 类)工作正常,但它不适用于我的应用程序的另一个类(比如 B 类);相反,dynamicCast 可以在 B 类中正常工作,而在 A 类中则失败。
-
A 和 B 都标有 Q_OBJECT 吗?
-
似乎构建的包包含所有必需的库和插件,因为如果我只是使用一些“if-else”语句跳过“错误代码”,则不会发生错误。
标签: qt ubuntu dynamic-cast qsharedpointer