c++ - 如何在基于 BB10 Cocos2D 的应用程序中导入和使用 QObject

标签 c++ blackberry-10 qmake qobject

我目前正在使用 Cocos2dx 提供的 BBTemplateProject 示例为 BB10 平台构建 Cocos2d-x 游戏。我是 C++ 编程的新手,目前的游戏是我已经研究了一段时间的 Java 项目的一个端口。为了保存游戏数据(分数、一些设置等),我打算使用 BB10 提供的 QtSQl 库。 我已经在示例 Cascades 应用程序中成功运行了一些示例 Qtsql 代码并且运行良好。 但是,将相同的代码集成到我的 Cocos2dx BB10 项目中是行不通的。 我使用 momentics IDE 并将 qt4、QtCore、QtDeclarative、路径/符号添加到项目中,但仍然收到以下错误

undefined reference to `QObject::QObject(QObject*)'
undefined reference to `vtable 
undefined reference to `QSqlDatabase::defaultConnection'
.. and a bunch of other Q- related object errors.

在此处阅读 Qobject 之后 http://developer.blackberry.com/cascades/reference/moc.html 我怀疑 MOC 编译器没有适当引用或类似的问题。此外,鉴于相同的代码在 Momentics IDE 中集成到自动生成的级联项目中时运行良好,我被引导相信这是某种 moc 编译器问题。鉴于我是 C++ 开发的新手,我仍然无法弄清楚如何将适当的 qmake 文件规则添加到 Momentics IDE 以识别 Qobjects。在这方面需要帮助。

肯定会感谢经验丰富的 C++ 开发人员或在 cocos2dx blackberry 10 项目中存储数据的更好方法的任何指示。

提前致谢。

编辑:

这是迄今为止我在尝试使用 QtSql 进行数据库交互方面取得的进展。 QtSQl 需要包含上述 QObject 的 QtCore。到目前为止,我一直无法成功集成 QtCore 库。

我做了以下事情。

  • 使用以下过程将/usr/include/qt4 和/usr/include/QtCore 和/usr/include/QtSql 添加到我的包含列表中

  • 在 Project Explorer 中右键单击您的项目并选择属性

  • 将树扩展到 C/C++ 通用/路径和符号
  • 将路径和符号框中的配置更改为[所有配置]
  • 点击 Includes 标签并在 Languages 列表中选择 GNU C(或为每种语言执行此操作)。
  • 单击“添加...”并输入 ${QNX_TARGET}/usr/include/qt4 并按“确定”
  • 单击“添加...”并键入 ${QNX_TARGET}/usr/include/qt4/QtCore 并按“确定”

  • 使用Momentics IDE 添加库函数将QtCore 和QtSql 添加到项目中。 RightClick->configure->add Library and Standard BlackBerry Platform Library。库添加成功。

我基本上遵循了这篇相关帖子中详述的步骤 Adding QtCore Library in blackberry 10 sdk .但是现在得到这个错误。

\win32\x86\usr\bin\ntoarm-ld: cannot find -lQtCore

该帖子中的 OP 提到解决“一些链接器问题”但没有提及如何解决。我还尝试修改 bar-descriptor.xml 文件,添加以下行

  <env var="LD_LIBRARY_PATH" value="app/native/lib:/usr/lib/qt4/lib"/>
<asset path="${QNX_TARGET}\${CPUVARDIR}usr\lib\qt4\lib\libQtCore.so" type="Qnx/Elf">lib/libQtCore.so.4</asset>

错误仍然存​​在。 如何解决此“链接器”或未找到库的错误?非常感谢。

最佳答案

首先,如果您计划在黑莓 10 和 Android 上使用相同的应用程序,因为您来自 Java,我会尝试使用比 Qt 更小的应用程序,例如 SQLite library , 以尽可能简单地在两个平台之间进行移植。但是您显然可以在 BB10 上使用 QtSQL 并在 Android 中使用其他东西,您只是需要编写更多代码。

其次,关于您的问题:对 QObject::QObject(QObject*) 的 undefined reference 意味着您正在使用此符号(QObject 构造函数,您是调用可能是因为你们中的一个类继承自 QObject),但没有提供它。您可能已将 QtCore 添加到您的包含路径,因为编译器发现了它,而不是链接器:您需要指定您希望您的应用程序与 QtCore.so (或者可能是 QtCore4 .so,我现在没有 SDK 来检查确切的名称)。您会找到有关如何执行此操作所需的一切信息 here .

关于 moc:moc 代表元对象编译器。它基本上解析您的 header ,寻找您的类的元数据:主要是属性、信号和插槽。更具体地说,所有需要 Q_OBJECT 宏的东西。如果您不使用这些功能,则不需要运行 moc。

如果您必须运行它(因为您使用了一些元对象功能):您有两个选择。选项一:使用 QMake 编译您的项目。您必须从头开始将您的项目重新创建为 Qt 项目(可能与 Momentics 上的 Cascades 项目没有区别,但这只是删除您链接到的库的问题,没什么大不了的)才能做到这一点。选项二:添加自定义规则以在需要它的 header 上运行 moc。它将生成一些您需要包含在项目中的 moc_yourclass.cpp 文件。我不知道如何在 Momentics 上添加自定义步骤,但我认为它应该是可行的......

关于c++ - 如何在基于 BB10 Cocos2D 的应用程序中导入和使用 QObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17878599/

相关文章:

.net - native C++ 应用程序的 list ?

blackberry-10 - 在 Sign Key -BB10 中更改作者姓名

ide - 如何修复 BB10 IDE 中的模块未安装错误

android - 如何在Qt项目中设置Android目标版本?

c++ - Qt qmake 和 DISTFILES

c++ - 为什么还用C语言呢?

c++ - 不明确的成员访问表达式 : is Clang rejecting valid code?

c++ - 我需要为 DualTVL1OpticalFlow 添加哪个 header ?

jenkins - BB10 从命令行启动应用程序

QtCreator 中的 qmake 无法识别 Linux 环境变量