尝试解决问题很久,没有成功,QT版本5.15.0。MinGW 8.1.0, 64 位
该问题似乎仅在 QML 文件中加载地图插件时发生,下面是代码的片段调用 qmlView->setSource(QUrl("qrc:/maps/map.qml")); 等待至少 2 秒,然后 GUI 冻结。基本上 GUI 线程被阻塞了 2 秒。我试图在一个单独的线程中调用 qmlView->setSource(QUrl("qrc:/maps/map.qml")) 但崩溃了,不太确定 Loader QML 类型是否可以工作,因为它是相同的 GUI 线程。
我什至尝试了https://doc.qt.io/qt-5/qtlocation-mapviewer-example.html的示例,当您更改提供程序时,主 GUI 也会冻结
有没有办法在 GUI 不冻结的情况下加载 QML 文件?谢谢
QQuickView * qmlView = new QQuickView();
QQmlEngine * eng = qmlView->engine();
eng->addPluginPath(qApp->applicationDirPath());
qmlView->setSource(QUrl("qrc:/maps/map.qml"));
QML 文件是
import QtQuick 2.0
import QtQuick.Window 2.0
import QtLocation 5.15
import QtPositioning 5.6
Item {
id: item
anchors.fill: parent
visible: true
Plugin {
id: mapPlugin
name: "osm" // Other mapas are "osm", "mapbox" "mapboxgl", "esri", ...
}
Map {
id: map
anchors.fill: parent
anchors.leftMargin: -84
anchors.topMargin: -47
objectName: "rect"
plugin: mapPlugin
center {
latitude: 52.1619403
longitude: -7.1488692
}
zoomLevel: 14
}
}
从 JarMan 输入后,我尝试使用 QML Loader,见下文,但 GUI 仍然冻结
Loader {
id: windowLoader
source: "qrc:/maps/map.qml"
focus: true
asynchronous: true
//property bool valid: item !== null
}