———————pro—————————–
QT += core gui location positioning
QT += quick widgets quickwidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
DISTFILES += \
map.qml
RESOURCES += \
src.qrc
————————mainwindow.h—————————-
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
// 更新坐标的接口
void updateCoordinates(double latA, double lonA, double latB, double lonB);
private slots:
void on_zoomInButton_clicked();
void on_zoomOutButton_clicked();
private:
Ui::MainWindow *ui;
private :
void zoomOut();
void zoomIn();
};
#endif // MAINWINDOW_H
——————————–main.cpp———————————
#include “mainwindow.h”
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
// 更新坐标到新位置
// w.updateCoordinates(34.0522, -118.2437, 36.7783, -119.4179); // A: Los Angeles, B: Fresno
qDebug()<<"11";
return a.exec();
}
---------------------------mainwindow.cpp---------------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 获取 QQuickWidget
QQuickWidget *quickWidget = ui->quickWidget;
// 设置 QML 文件路径
quickWidget->setSource(QUrl(QStringLiteral(“qrc:/map.qml”)));
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
// 获取 QML 上下文
QQmlContext *context = quickWidget->rootContext();
// 默认坐标
QVariant coordinateA = QVariant::fromValue(QGeoCoordinate(37.7749, -122.4194)); // San Francisco
QVariant coordinateB = QVariant::fromValue(QGeoCoordinate(37.8044, -122.2711)); // Oakland
// 传递默认坐标到 QML
context->setContextProperty(“coordinateA”, coordinateA);
context->setContextProperty(“coordinateB”, coordinateB);
// 连接按钮到槽函数
connect(ui->zoomInButton, &QPushButton::clicked, this, &MainWindow::on_zoomInButton_clicked);
connect(ui->zoomOutButton, &QPushButton::clicked, this, &MainWindow::on_zoomOutButton_clicked);
}
void MainWindow::updateCoordinates(double latA, double lonA, double latB, double lonB)
{
QQuickWidget *quickWidget = ui->quickWidget;
QQuickItem *rootObject = quickWidget->rootObject(); // 修改为 QQuickItem*
if (rootObject) {
// 更新 QML 的属性
rootObject->setProperty(“coordinateA”, QVariant::fromValue(QGeoCoordinate(latA, lonA)));
rootObject->setProperty(“coordinateB”, QVariant::fromValue(QGeoCoordinate(latB, lonB)));
} else {
qWarning() << "Root object is null!";
}
}
// 放大地图
void MainWindow::zoomIn()
{
}
// 缩小地图
void MainWindow::zoomOut()
{
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_zoomInButton_clicked()
{
qDebug()<<"2";
QQuickWidget *quickWidget = ui->quickWidget;
QQuickItem *rootObject = quickWidget->rootObject();
if (rootObject) {
double currentZoom = rootObject->property(“zoomLevelVal”).toDouble();
double newZoom = currentZoom + 1.0; // 增加 zoomLevel
rootObject->setProperty(“zoomLevelVal”, newZoom);
}
}
void MainWindow::on_zoomOutButton_clicked()
{
QQuickWidget *quickWidget = ui->quickWidget;
QQuickItem *rootObject = quickWidget->rootObject();
if (rootObject) {
double currentZoom = rootObject->property(“zoomLevelVal”).toDouble();
double newZoom = currentZoom – 1.0; // 减少 zoomLevel
rootObject->setProperty(“zoomLevelVal”, newZoom);
qDebug()<
}
}
———————————main.qml———————————-
#include “mainwindow.h”
#include “ui_mainwindow.h”
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 获取 QQuickWidget
QQuickWidget *quickWidget = ui->quickWidget;
// 设置 QML 文件路径
quickWidget->setSource(QUrl(QStringLiteral(“qrc:/map.qml”)));
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
// 获取 QML 上下文
QQmlContext *context = quickWidget->rootContext();
// 默认坐标
QVariant coordinateA = QVariant::fromValue(QGeoCoordinate(37.7749, -122.4194)); // San Francisco
QVariant coordinateB = QVariant::fromValue(QGeoCoordinate(37.8044, -122.2711)); // Oakland
// 传递默认坐标到 QML
context->setContextProperty(“coordinateA”, coordinateA);
context->setContextProperty(“coordinateB”, coordinateB);
// 连接按钮到槽函数
connect(ui->zoomInButton, &QPushButton::clicked, this, &MainWindow::on_zoomInButton_clicked);
connect(ui->zoomOutButton, &QPushButton::clicked, this, &MainWindow::on_zoomOutButton_clicked);
}
void MainWindow::updateCoordinates(double latA, double lonA, double latB, double lonB)
{
QQuickWidget *quickWidget = ui->quickWidget;
QQuickItem *rootObject = quickWidget->rootObject(); // 修改为 QQuickItem*
if (rootObject) {
// 更新 QML 的属性
rootObject->setProperty(“coordinateA”, QVariant::fromValue(QGeoCoordinate(latA, lonA)));
rootObject->setProperty(“coordinateB”, QVariant::fromValue(QGeoCoordinate(latB, lonB)));
} else {
qWarning() << "Root object is null!";
}
}
// 放大地图
void MainWindow::zoomIn()
{
}
// 缩小地图
void MainWindow::zoomOut()
{
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_zoomInButton_clicked()
{
qDebug()<<"2";
QQuickWidget *quickWidget = ui->quickWidget;
QQuickItem *rootObject = quickWidget->rootObject();
if (rootObject) {
double currentZoom = rootObject->property(“zoomLevelVal”).toDouble();
double newZoom = currentZoom + 1.0; // 增加 zoomLevel
rootObject->setProperty(“zoomLevelVal”, newZoom);
}
}
void MainWindow::on_zoomOutButton_clicked()
{
QQuickWidget *quickWidget = ui->quickWidget;
QQuickItem *rootObject = quickWidget->rootObject();
if (rootObject) {
double currentZoom = rootObject->property(“zoomLevelVal”).toDouble();
double newZoom = currentZoom – 1.0; // 减少 zoomLevel
rootObject->setProperty(“zoomLevelVal”, newZoom);
qDebug()<
}
}