如何将 QML 映射添加到 QGraphicsscene?

Posted

技术标签:

【中文标题】如何将 QML 映射添加到 QGraphicsscene?【英文标题】:How to add QML map to QGraphicscene? 【发布时间】:2018-10-04 04:52:53 【问题描述】:

应用程序有QGraphicscene(mpscene)QGraphicsView(mpGraphicsView) 我正在尝试将qml 地图对象 添加到QGraphicscene(mpscene) 但地图视图像弹出窗口一样单独出现。如何将此地图添加到QGraphicscene(mpscene)

以下是我在其他帖子中建议的几种方法。

方法1

 PlaneTrack *blr2bgm = new PlaneTrack; //Cpp object set to root context
 QQmlEngine *engine = new QQmlEngine(mpGraphicsView);
 QQuickWidget *view = new QQuickWidget(engine, mpGraphicsView);
 view->setResizeMode(QQuickWidget::SizeViewToRootObject);
 view->rootContext()->setContextProperty("blr2bgm",blr2bgm);
 view->setSource(QUrl(QStringLiteral("qrc:/PlaneTrack.qml")));
 mpScene->addWidget(view);    

方法2

 PlaneTrack *blr2bgm = new PlaneTrack; //Cpp object set to root context
 QQuickView *view = new QQuickView();
 view->rootContext()->setContextProperty("blr2bgm",blr2bgm);
 view->setSource(QUrl(QStringLiteral("qrc:/PlaneTrack.qml")));
 view->setResizeMode(QQuickView::SizeRootObjectToView);
 QWidget *container = QWidget::createWindowContainer(view);
 container->setMinimumSize(view->size());
 container->setFocusPolicy(Qt::TabFocus);
 mpScene->addWidget(container);

【问题讨论】:

请出示您的 .qml @eyllanesc 与 planespotter Qt 示例相同 我将飞机观测器 qt 示例 qml 代码添加到场景中。 @eyllanesc 是否将 qml 文件加载到图形场景中取决于 qml 文件? 我已经做过测试,首先如果你得到 2 个窗口可能是因为 QML 的根是 Window 或 ApplicationWindow,如果是这样将其更改为 Item,另一方面我看到它是无法嵌入,因为 GraphicScene 无法渲染,例如在测试中我让 QML 显示自己,并且在将时间 T 添加到场景后,它没有正确渲染。 【参考方案1】:

PlaneTrack.qml 文件 window 容器中,我将其更改为 Item。 以下代码将 qml 添加到图形场景中。

    PlaneTrack *blr2bgm = new PlaneTrack; // cpp class object data interact

    QQuickWidget *view = new QQuickWidget();
    view->rootContext()->setContextProperty("blr2bgm",blr2bgm);
    view->setSource(QUrl(QStringLiteral("qrc:/PlaneTrack.qml")));
    view->setMinimumSize(300, 300);
    view->setResizeMode(QQuickWidget::SizeRootObjectToView);

    mpScene->addWidget(view); // adding to Graphic scene 

【讨论】:

以上是关于如何将 QML 映射添加到 QGraphicsscene?的主要内容,如果未能解决你的问题,请参考以下文章

创建后如何将项目添加到 QML 网格?

如何将 Switch Qml 添加到 qt 小部件?

Qt3d QML:如何将文本作为覆盖添加到标准示例

如何在 QML 中添加和使用资源?

如何将鼠标滚轮滚动添加到垂直滚动条或滚动区域?

QML MouseArea:如何将鼠标事件传播到其他鼠标区域?