C ++:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlEngine engine;
interaction inter("test");
engine.rootContext()->setContextProperty("interaction", &inter);
QQmlComponent component(&engine, QUrl::fromLocalFile("qrc:///main.qml"));
if (component.status() != component.Ready) {
if (component.status() == component.Error) {
qDebug(component.errorString().toUtf8().constData());
}
}
else {
qDebug("not ready");
}
}
component.create();
return app.exec();
}
QML:
import QtQuick 2.2
Rectangle {
width: 500 ; height: 500
visible: true
MouseArea {
anchors.fill: parent
onClicked: {
text.text = inter.author
}
}
Text {
id: text
text: "some text to change"
}
}
错误:
" file:/// C:/ Qt / Tools / QtCreator / bin / build-testcpp-Desktop_Qt_5_3_MSVC2013_OpenGL_64bit-Debug / qrc:/main.qml:-1找不到文件
QQmlComponent:组件未就绪"
我是qt的新手,并尝试使用c ++来更改文本元素,它编译并运行正常,但它永远不会加载,因为它无法找到qrc文件。我尝试过禁用阴影构建,使用完整路径传递QUrl而不是" qrc:///main.qml"我已经尝试在QStringLiteral中包装路径,但似乎没有任何效果。
如果有人有任何建议,将不胜感激。
编辑:
的.pro
TEMPLATE = app
QT += qml quick
SOURCES += main.cpp \
interaction.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
HEADERS += \
interaction.h
.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>MyItem.qml</file>
</qresource>
</RCC>
答案 0 :(得分:4)
首先,不要禁用阴影构建。他们不是问题。永远不会。
qrc
未引用文件系统。它指的是Qt资源系统。必须将main.qml
文件编译到应用程序的可执行文件中。 qt资源编译器(qrc)工具处理它。
因此,您的网址错误。该文件不是本地文件。这是一种资源。只需:
QQmlComponent component(&engine, QUrl("qrc:/main.qml"));