Qt - QQuickWidget setSource без зависания интерфейса - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю над проектом управления, в котором мне нужно управлять данными клиентов из базы данных, и мне нужно добавить виджет карты, который показывает положение клиента (путем извлечения его координат из базы данных). Я создал небольшой прототип дляузнайте, как использовать QML + Map Plugin, потому что я никогда не использовал их раньше, и я решил использовать QQuickWidget, чтобы показать мою Карту (QML карты был взят из примеров Qt с несколькими изменениями) ... но я столкнулся с проблемой, когда я выполняюмоей программе, требуется несколько минут, чтобы показать пользовательский интерфейс, который, как я предполагал, связан с моим медленным интернет-соединением, чтобы получить данные карты и все, но мне здесь нужно показать пользовательский интерфейс и все (выполнить запросы к базе данных и все).Так что мне нужно, чтобы выполнить виджет карты (получить карту), пока пользователь обрабатывает пользовательский интерфейс, чтобы пользователь мог выбирать, искать, удалять и делать все, что он хочет (виджет карты будет пустым, потому что он еще не был загружен), ДОкарта готова к показу.

Вот мой код: MainWindow:

ui->quickWidget->setSource(QUrl("qrc:/new/prefix1/main.qml"));
QObject *object = ui->quickWidget->rootObject();
object->setProperty("_title" , "Oslo");
object->setProperty("_x" , "59.93");
object->setProperty("_y" , "10.76"); 

Скрипт QML карты (main.qml):

import QtQuick 2.0
import QtQuick.Window 2.0
import QtLocation 5.6
import QtPositioning 5.6

Item
{
    width: 512
    height: 512
    visible: true
    property var _x: 0
    property var _y: 0
    property string _title: ""

    Plugin
    {
        id: mapPlugin
        name: "osm"
    }

    Map
    {
        anchors.fill: parent
        plugin: mapPlugin
        center: QtPositioning.coordinate(_x , _y)
        zoomLevel: 15

        ListModel
        {
            id: locationModel
            ListElement {lat: 0; lon: 0; color: "blue"}
            ListElement {lat: 5; lon: 12.5; color: "green"}
            ListElement {lat: 10; lon: 25; color: "red"}
        }

        MapItemView
        {
            model: locationModel
            delegate: MapQuickItem
            {
                coordinate: QtPositioning.coordinate(_x , _y)
                anchorPoint: Qt.point(10 , 10)
                sourceItem: Column
                {
                    Image {source: "marker.png"}
                    Text {text: _title}
                }
            }
        }
    }
}

Спасибо!

1 Ответ

0 голосов
/ 19 июня 2019

Я выяснил, что проблема вызвана отсутствием библиотек OpenSSL.Вы можете прочитать соответствующую тему здесь :

Решение, которое работает для меня:

  • скачать .zip файл из https://indy.fulgan.com/SSL/
  • выдержкаlibeay32.dll и ssleay32.dll
  • скопируйте их в двоичную папку qt (например, в моем случае \ QT \ Qt5.11.0 \ 5.11.0 \ mingw53_32 \ bin \)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...