MFC开发百度地图,发现鼠标一直在转圈,1s1个点往里面添加marker,也会出现转圈。后来发现是convertor.translate这个回调,哪怕回调执行内容是空的,也会转,整个就不回调,转圈就没有了
3条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
要解决这个问题,首先确保在
main.cpp文件中包含了必要的头文件,并且已经正确地设置了应用程序的窗口大小和位置。-
初始化Google Maps SDK:
// 导入必要的类库 #include <QApplication> #include <QGuiApplication> #include <QQmlApplicationEngine> // 设置应用程序窗口尺寸和位置 int main(int argc, char *argv[]) { QApplication app(argc, argv); QGuiApplication::setWindowIcon(QIcon("icon.png")); // 初始化Google Maps SDK GoogleMapsInit(); // 创建并显示应用程序窗口 return app.exec(); } -
设置Google Maps API Key:
// 在主函数之前导入Google Maps相关库 #include "google/maps/api/geocoding/Geocoder.h" // 设置API密钥 const char* apiKey = "YOUR_API_KEY"; -
创建Google Maps实例:
// 创建Google Maps实例 GoogleMap googleMap; googleMap.setApiKey(apiKey); googleMap.enableLocationUpdates(this); -
添加Marker:
// 添加Marker到地图上 googleMap.addMarker(QGeoPoint(0, 0), new MarkerInfo()); -
处理鼠标移动事件:
void mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { googleMap.centerOn(event->pos().toPoint(), 15); // 调整中心点的位置 } else { qDebug() << "左键未按下"; } } -
处理鼠标单击事件:
void mousePressEvent(QMouseEvent *event) { // 如果鼠标点击在Marker上,则移除Marker if (event->button() == Qt::RightButton && event->modifiers() == Qt::NoModifier) { googleMap.removeMarkerAt(event->pos().toPoint()); } } -
处理转换器:
// 定义一个转换器,用于处理鼠标移动和单击事件 class MouseConverter : public QObject { Q_OBJECT Q_PROPERTY(bool enabled READ isMouseEnabled NOTIFY isMouseEnabledChanged) Q_PROPERTY(bool rightMouseButton READ isRightMouseButton NOTIFY isRightMouseButtonChanged) Q_PROPERTY(QVector<QPoint> clickedPoints READ getClickedPoints NOTIFY clickedPointsChanged) bool isMouseEnabled; bool isRightMouseButton; QVector<QPoint> clickedPoints; MouseConverter(QObject *parent = nullptr) : QObject(parent), isMouseEnabled(false), isRightMouseButton(false), clickedPoints() { } void setEnabled(bool enable) { isMouseEnabled = enable; } void setRightMouseButton(bool enable) { isRightMouseButton = enable; } void addClickedPoint(const QPoint &point) { clickedPoints.append(point); } void removeClickedPoint(const QPoint &point) { clickedPoints.removeAll(point); } void emitIsMouseEnabledChanged(bool value) { qWarning() << "isMouseEnabled changed: " << value; emit isMouseEnabledChanged(value); } void emitIsRightMouseButtonChanged(bool value) { qWarning() << "isRightMouseButton changed: " << value; emit isRightMouseButtonChanged(value); } void emitClickedPointsChanged(const QVector<QPoint> &value) { qWarning() << "clickedPoints changed: "; emit clickedPointsChanged(value); } }; -
调用转换器:
MouseConverter converter; connect(&converter, &MouseConverter::isMouseEnabledChanged, this, &MouseHandler::onIsMouseEnabledChanged); connect(&converter, &MouseConverter::isRightMouseButtonChanged, this, &MouseHandler::onIsRightMouseButtonChanged); connect(&converter, &MouseConverter::clickedPointsChanged, this, &MouseHandler::onClickedPointsChanged); -
更新UI:
void onIsMouseEnabledChanged(bool enabled) { // 更新UI } void onIsRightMouseButtonChanged(bool rightMouseButton) { // 更新UI } void onClickedPointsChanged(const QVector<QPoint> &points) { // 更新UI }
通过以上步骤,应该可以解决鼠标在地图上的旋转问题。此外,根据实际需求,还可以进一步优化UI界面、调整地图样式等。
解决 无用评论 打赏 举报 编辑记录-