0

尝试解决问题很久,没有成功,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
}
4

0 回答 0