Qt 希望我如何链接 QML 模块?

问题描述 投票:0回答:1

我的问题是当我在我的 main.qml 文件中导入我的自定义模块时,我收到一个运行时错误,指出该模块未安装。这是一个例子:

// main.qml

import QtQuick
import Ui

Window {
    visible: true

    MyComponent {
        anchors.fill: parent
    }
}
// Ui/MyComponent.qml

import QtQuick
import QtQuick.Controls

Item {
    Button {
        anchors.centerIn: parent
        text: "Click"
    }
}
// Main.cpp

#include <QtGui/QGuiApplication>
#include <QtQml/QQmlApplicationEngine>

auto main(int argumentCount, char* arguments[]) -> int
{
    QGuiApplication const application(argumentCount, arguments);
    QQmlApplicationEngine const engine("qrc:/main.qml");

    return QGuiApplication::exec();
}
// CMakeLists.txt

...

find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)

add_subdirectory(Ui)

qt6_add_executable(Application Main.cpp)
qt6_add_qml_module(Application URI Application QML_FILES main.qml NO_RESOURCE_TARGET_PATH)
target_link_libraries(Application PRIVATE Qt6::Gui Qt6::Qml Ui)
// Ui/CMakeLists.txt

find_package(Qt6 REQUIRED COMPONENTS Qml)

qt6_add_qml_module(Ui URI Ui QML_FILES MyComponent.qml)

根据 Qt 文档,qt_add_qml_module 创建了两个目标:第一个是支持库,第二个是插件。我必须将哪一个链接到我的可执行文件?链接到其他模块怎么样?

我想我尝试了所有可能的组合,唯一有效的方法是链接静态插件,甚至在极少数 Qt 博客中提到它,但他们没有解释为什么必须那样。实际上,无论我研究多久,似乎都没有人对此做出解释。同样的故事,为什么我在使用标准 QtQuick 模块时不必链接任何库。

c++ qt qml
1个回答
1
投票

对于模块,您必须将 plugin 添加到名称中。所以它会是:

target_link_libraries(Application PRIVATE Qt6::Gui Qt6::Qml Uiplugin)

小写插件!

在这里您可以找到有关模块创建的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.