我在开始的时候,当我通过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"
}
}
}
}
1条答案
按热度按时间rbpvctlc1#
初始展开(快速和肮脏)
1.关闭Qt创建器。
1.将以下内容复制到C:\部署\
1.(如果使用QML)C:\Qt\5.2.1\mingw48_32\qml
1.启动C:\部署\MyApp.exe。
如果你的应用运行正常,恭喜你!你几乎可以部署了。但你不想发布1.5GB的软件包,所以是时候清理未使用的文件了。