我想在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();
}
您的日志记录似乎有些被截断。通常在这种情况下(对我来说是 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()
}
}
}
我也遇到同样的问题,请问解决了吗?