Qt6 QML QQmlApplicationEngine 无法加载组件错误

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

我想在QtQuick中使用组件,我有两个qml文件,一个是main.qml,第二个是button.qml,并且我使用这个示例作为他们的文档,但是当我运行我的代码时,它给我错误,QQmlApplicationEngine失败负载组件 qrc:/bbb/main.qml:13:5:按钮不是一种类型。我还在 main.qml 中导入的按钮中看到一些红色错误。

main.qml

import QtQuick

    Window {
        id:root
         width: 640
         height: 480
         visible: true
         title: qsTr("Hello World")
    
    
        Button { // our Button component
            id: button
            x: 12; y: 12
            text: "Start"
            onClicked: {
                status.text = "Button clicked!"
            }
        }
    
        Text { // text changes when button was clicked
            id: status
            x: 12; y: 76
            width: 116; height: 26
            text: "waiting ..."
            horizontalAlignment: Text.AlignHCenter
        }
    
    }

按钮.qml

import QtQuick 2.0

Item {
    Rectangle {
        id: root
        // export button properties
        property alias text: label.text
        signal clicked

        width: 116; height: 26
        color: "lightsteelblue"
        border.color: "slategrey"

        Text {
            id: label
            anchors.centerIn: parent
            text: "Start"
        }
        MouseArea {
            anchors.fill: parent
            onClicked: {
                root.clicked()
            }
        }
    }

}

主.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>


int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/bbb/main.qml"_qs);
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

qml qt6
2个回答
0
投票

您的日志记录似乎有些被截断。通常在这种情况下(对我来说是 Qt5.11),该错误后面会出现在设计器中可见的

invalid property name 'text'
,这是这里真正的问题。

您应该记住,如果信号和属性在 Button.qml 中最顶部的元素上声明,则它们只能从外部可见/可用(因此在您的 main.qml 中)。看来你只需去掉

Item
包装即可使其工作

按钮.qml:

import QtQuick 2.0

Rectangle {
    id: root
    // export button properties
    property alias text: label.text
    signal clicked

    width: 116; height: 26
    color: "lightsteelblue"
    border.color: "slategrey"

    Text {
        id: label
        anchors.centerIn: parent
        text: "Start"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            root.clicked()
        }
    }
}

0
投票

我也遇到同样的问题,请问解决了吗?

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