簡體   English   中英

如何將 QML_ELEMENT 與 cmake 一起使用

[英]How to use QML_ELEMENT with cmake

文檔顯示我可以使用 QML_ELEMENT 宏通過在 qmake's.pro 文件中添加一些變量來從 C++ 創建 QML 類型。 但我正在使用 cmake

更新(Qt 6.2+)

從 Qt 6.2 開始, qt_add_qml_module是用於構建 qml 模塊的單個命令,它應該處理幾乎所有事情,取代舊的qt6_qml_type_registration命令。

舊答案(Qt 6.0/6.1)

現在 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和朋友的類型。 筆記:

  • 在構建 output 文件夾中創建了兩個文件, <project>_qmltyperegistrations.cpp<project>.qmltypes ,如果您的導入失敗,您可以查看這些文件以查看缺少哪些類型。 我發現有時在添加/刪除注冊類型后我需要進行完全重新編譯。
  • Qt 示例已遷移到 cmake,因此請查看Examples/Qt-6.0.0/quick/tableview/gameoflife以查看其實際運行情況
  • Qt/6.0.0/Src/qtbase/util/cmake的 Qt 源中現在有pro2cmake.pyrun_pro2cmake.py文件。 自述文件頁面上提到了它們,您可以在這里找到它們,我自己還沒有嘗試過。

編輯(Qt 6.x)

此答案最初發布於 Qt 5.15。 現在 Qt 6 可用了,如果你用的是 Qt 6,參考@Adversus 的回答

原始答案(Qt 5.x)

據我所知,通過查看文檔,CMake 還不支持使用QML_ELEMENT所必需的CONFIG += qmltypes ,即使是主分支也是如此。

並且提供 python.pro 到 cmake 轉換器的努力是針對 Qt6 的,沒有合並,並且據我所知沒有功能,通過wip/cmake分支上的 util測試它們(CMakeLists.txt 沒有相關的信息)。 您可以看到實際的轉換腳本確實測試了 CONFIG 中是否存在qmltypes ,但它似乎沒有將 map 轉換為任何可用於 CMake 的東西。

解決方案

不要使用QML_ELEMENTCONFIG += 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM