我正在创建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引擎中设置查找文件夹)
答案 0 :(得分:1)
通过以下方式制作网址解决:
QUrl::fromLocalFile( QFileInfo( "qml:/MainWindow.qml" ).absoluteFilePath() );