即使在相同的目录中也找不到QML组件

时间:2014-11-21 09:47:42

标签: qt qml

我正在创建C ++ / QML应用程序。在调试版本中,我想直接从文件加载QML,在发布版本中,我想从资源加载QML。我想使用QDir::setSearchPaths

    void GuiController::initQmlPath()
    {
#ifdef QT_DEBUG
        QDir dir( QApplication::applicationDirPath() );
        const bool success = dir.cd( "../../Game/Qml" ); // Depends on project structure
        Q_ASSERT( success );
        QDir::setSearchPaths( "qml", QStringList( dir.absolutePath() ) );
#else
        QDir::setSearchPaths( "qml", QStringList( ":/Game/Qml" ) );
#endif
    }

我以下一种方式加载组件:

connect( component, &QQmlComponent::statusChanged, stateSlot );
//component->loadUrl( QUrl( "qml:/MainWindow.qml" ) ); // Not working
component->loadUrl( QUrl::fromLocalFile( "C:/Projects/Launcher/Game/Qml/MainWindow.qml" ) ); // OK

当我在loadUrl中使用完整路径时 - 一切正常,但是当我使用qml:/MainWindow.qml时 - 找到了文件,但它无法加载组件,这些组件放在同一个文件夹中(简化的):

MainWindow.qml

Window {
  id: root
  visible: true
  CustomComponent {
  }
}

CustomComponent.qml

Rectangle {
  id: root
  color: "red"
}

如何解决? (如何通过searchPath在qml引擎中设置查找文件夹)

1 个答案:

答案 0 :(得分:1)

通过以下方式制作网址解决:

QUrl::fromLocalFile( QFileInfo( "qml:/MainWindow.qml" ).absoluteFilePath() );