c++ - QQmlEngine 和 cmake

标签 c++ qml

我无法将 QQmlEngine 包含到 cmake 项目中。

这是我的 C++:

#include <QtQml/QQmlEngine>
...
QObject *someQObject;
QQmlEngine::setObjectOwnership(someQObject, QQmlEngine::ObjectOwnership::CppOwnership);

以及 cmake 部分:

find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5Quick REQUIRED)
...
add_executable(name ${src})
qt5_use_modules(name Core Gui Qml Quick )

编译失败:

CMakeFiles/....cpp.o: In function `...':
....cpp:57: undefined reference to `QQmlEngine::setObjectOwnership(QObject*, QQmlEngine::ObjectOwnership)'
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)

我错过了什么?

编辑,@qCring(抱歉,无法评论您的回答):

好吧,当我省略“setObjectOwnership”调用时,一切正常。 Qt 应用程序的其余部分工作正常。因此它实际上以某种方式链接。

当我添加你的行时,我得到了

"The plain signature for target_link_libraries has already been used with the target "name".  All uses of target_link_libraries with a target   must be either all-keyword or all-plain."

编辑:

我的问题以某种方式消失了。我在 x86_64 上运行 arch linux。

最佳答案

您实际上并没有链接到 Qt 库,因此出现 undefined symbol 错误。 find_packageqt5_use_modules 这两个宏都只提供来自某些包/模块的 CMake 变量。您必须像这样链接库:

target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Core PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml)

关于c++ - QQmlEngine 和 cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39808193/

相关文章:

c++ - 在 C++ 中操作 blob

c++ - cin >> x 错误时的计算结果是什么?

c++ - RapidXML 的编译错误

c++ - qabstractitemmodel 数据在 qml 中没有改变

c++ - QSqlTableModel 到 qml 列表多次通过

c++ - 模型中的 Qt 模型?

c++ - 是否可以更改 'this' 关键字的类型?

c++ - Eclipse - 在 C++ 项目中重新设置断点时出错

c++ - ubuntu sdk qml 快速查看窗口关闭,最小化按钮不可见

c++ - Qml Grid、Column 和 RowLayout 不适用于 LayoutMirroring