![](/img/trans.png)
[英]Unknown type name QML_ELEMENT and QML module can't be found even though copied straight from a official example
[英]How to use QML_ELEMENT with cmake
從 Qt 6.2 開始, qt_add_qml_module是用於構建 qml 模塊的單個命令,它應該處理幾乎所有事情,取代舊的qt6_qml_type_registration
命令。
現在 Qt 6.0 已經出來了,盡管文檔很少,但它是受支持的。 你現在需要的是:
set_target_properties(foo PROPERTIES
QT_QML_MODULE_VERSION 1.0
QT_QML_MODULE_URI Foo
)
qt6_qml_type_registration(foo)
然后你可以在 qml 中做:
import Foo
您將可以訪問具有QML_ELEMENT
和朋友的類型。 筆記:
<project>_qmltyperegistrations.cpp
和<project>.qmltypes
,如果您的導入失敗,您可以查看這些文件以查看缺少哪些類型。 我發現有時在添加/刪除注冊類型后我需要進行完全重新編譯。Examples/Qt-6.0.0/quick/tableview/gameoflife
以查看其實際運行情況Qt/6.0.0/Src/qtbase/util/cmake
的 Qt 源中現在有pro2cmake.py
和run_pro2cmake.py
文件。 自述文件頁面上提到了它們,您可以在這里找到它們,我自己還沒有嘗試過。此答案最初發布於 Qt 5.15。 現在 Qt 6 可用了,如果你用的是 Qt 6,參考@Adversus 的回答。
據我所知,通過查看文檔,CMake 還不支持使用QML_ELEMENT
所必需的CONFIG += qmltypes
,即使是主分支也是如此。
並且提供 python.pro 到 cmake 轉換器的努力是針對 Qt6 的,沒有合並,並且據我所知沒有功能,通過在wip/cmake
分支上的 util測試它們(CMakeLists.txt 沒有相關的信息)。 您可以看到實際的轉換腳本確實測試了 CONFIG 中是否存在qmltypes
,但它似乎沒有將 map 轉換為任何可用於 CMake 的東西。
不要使用QML_ELEMENT
和CONFIG += qmltypes
,它是 Qt 5.15 中的全新內容(寫這篇文章時的最新版本),目前 CMake 不支持它,而是使用 C++ 中的舊qmlRegisterType
:
#include "YouCustomCppClass.h"
int main(int argc, char** argv) {
// Let you import it with "import ModuleName 1.0" on the QML side
qmlRegisterType<YouCustomCppClass>("ModuleName", 1, 0, "YourQmlComponent");
//Create your QML view or engine
}
這不需要項目文件方面的任何特定內容,只要您的代碼/插件執行qmlRegisterType
語句即可。
您可以參考 Qt 的文檔,與您的頁面相同,但 Qt 5.14 而不是最新的,它准確地描述了: Writing QML extensions for C++ | Qt 5.14
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.