使用组件找不到Qt文件

时间:2014-09-02 10:36:47

标签: c++ qt

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>

1 个答案:

答案 0 :(得分:4)

首先,不要禁用阴影构建。他们不是问题。永远不会。

qrc未引用文件系统。它指的是Qt资源系统。必须将main.qml文件编译到应用程序的可执行文件中。 qt资源编译器(qrc)工具处理它。

因此,您的网址错误。该文件不是本地文件。这是一种资源。只需:

QQmlComponent component(&engine, QUrl("qrc:/main.qml"));