windows QObject::连接(QQuickWindow、QDeclarativeGeoMap):无效的nullptr参数

qrjkbowd  于 2023-03-09  发布在  Windows
关注(0)|答案(1)|浏览(140)

我在开始的时候,当我通过QTcreator运行项目时,我得到了这样的错误,然后所有的东西都显示出来了。但是当我运行.exe版本时,QQuickWidget没有显示出来(这就是问题所在)。
通过windeployqt工具配置--qmldir键,添加了ssl、QtLocation、QtPositioning的库。
mainwidget.ccp

#include "mainwidget.h"
#include "ui_mainwidget.h"
#include "mapwindow.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MainWidget)
{
    ui->setupUi(this);

    map_window = new MapWindow();

    connect(map_window, &MapWindow::return_on_main_window, this, &MainWidget::show);
}

MainWidget::~MainWidget()
{
    delete ui;
}

void MainWidget::on_MapButton_clicked()
{
    map_window -> show();

    this -> close();
}

mapwindow.cpp

#include "mapwindow.h"
#include "ui_mapwindow.h"

MapWindow::MapWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MapWindow)
{
    ui->setupUi(this);

    ui->MapWidget->setSource(QUrl::fromLocalFile(":/Map_QML.qml"));
    ui->MapWidget->show();
}

MapWindow::~MapWindow()
{
    delete ui;
}

void MapWindow::on_ReturnButton_clicked()
{
    this->close();

    emit return_on_main_window();
}

mainwidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include "mapwindow.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWidget; }
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();

private slots:
    void on_MapButton_clicked();

private:
    Ui::MainWidget *ui;
    MapWindow *map_window;
};
#endif // MAINWIDGET_H

mapwindow.h

#ifndef MAPWINDOW_H
#define MAPWINDOW_H

#include <QDialog>

namespace Ui {
class MapWindow;
}

class MapWindow : public QDialog
{
    Q_OBJECT

public:
    explicit MapWindow(QWidget *parent = nullptr);
    ~MapWindow();

signals:
    void return_on_main_window();

private slots:
    void on_ReturnButton_clicked();

private:
    Ui::MapWindow *ui;
};

Map_QML.qml

import QtQuick 2.0
import QtPositioning 5.15
import QtLocation 5.15

Rectangle {
    id: window

    property double oldLat: 49.45466
    property double oldLng: 30.52380
    property Component comMarker: mapMarker

    Plugin {
        id: mapPlugin
        name: "osm"
        PluginParameter
        {
            name: "osm.mapping.providersrepository.disabled"
            value: "true"
        }
        PluginParameter
        {
            name: "osm.mapping.providersrepository.address"
            value: "http://maps-redirect.qt.io/osm/5.6/"
        }
    }

    Map {
        id: mapView
        anchors.fill: parent
        plugin: mapPlugin
        center: QtPositioning.coordinate(oldLat, oldLng);
        zoomLevel: 5.5
    }

    function setCenter(lat, lng) {
        mapView.pan(oldLat - lat, oldLng - lng)
        oldLat = lat
        oldLng = lng
    }

    function addMarker(lat, lng) {
        var item = comMarker.createObject(window, {
                                           coordinate: QtPositioning.coordinate(lat, lng)
                                          })
        mapView.addMapItem(item)
    }

    Component {
        id: mapMarker
        MapQuickItem {
            id: markerImg
            anchorPoint.x: image.width/4
            anchorPoint.y: image.height
            coordinate: position

            sourceItem: Image {
                id: image
                source: "http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_red.png"
            }
        }
    }
}
rbpvctlc

rbpvctlc1#

初始展开(快速和肮脏)
1.关闭Qt创建器。
1.将以下内容复制到C:\部署\

  1. MyApp.exe的发布版本
  2. C:\Qt\5.2.1\mingw48_32\bin\中的所有.dll文件
  3. C:\Qt\5.2.1\mingw48_32\plugins\中的所有文件夹
    1.(如果使用QML)C:\Qt\5.2.1\mingw48_32\qml
    1.启动C:\部署\MyApp.exe。
    如果你的应用运行正常,恭喜你!你几乎可以部署了。但你不想发布1.5GB的软件包,所以是时候清理未使用的文件了。

相关问题