2014-09-02 2 views
2

C++:Qt Файл не найден с помощью компонента

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" 
    } 
} 

ошибка:

«Файл: /// C:/Qt/Инструменты/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> 

ответ

4

Прежде всего, не отключают тень строит. Это не проблема. Никогда не.

qrc не относится к файловой системе. Это относится к системе ресурсов Qt. Файл main.qml должен быть скомпилирован в исполняемый файл вашего приложения. Инструмент компилятора ресурсов qt (qrc) обрабатывает это.

Таким образом, ваш адрес неправильный. Файл не локальный файл. Это ресурс. Просто выполните:

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

благодарит за ответ! включая .pro и .qrc в исходном вопросе, да, я обычно не буду возиться с конфигурацией проекта, но я пытался все, что мог найти. – user3767686

Смежные вопросы