gpt4 book ai didi

qt - 在 QML 中,(如何)我可以将 MapItemGroup 作为 MapItemView 的委托(delegate)组件?

转载 作者:行者123 更新时间:2023-12-03 15:28:37 25 4
gpt4 key购买 nike

情况:我可以将 QML Map 项目与模型/ View /委托(delegate)一起使用。我能够处理单个项目。

问题:作为下一步,我希望能够绘制多个项目。我需要将多个 QML MapItem(如 MapCircle、MapRectangle 等)放在一个委托(delegate)组件中。一般来说,QML 支持一个委托(delegate)中的多个项目。问题出在 MapItemView 的委托(delegate)上:它不支持多个子项。

我的方法:

  • 我认为使用 MapItemGroup 会起作用。但似乎我错过了一些东西。关于如何使它作为委托(delegate)组件工作的文档也没有那么广泛。附加的代码片段显示了这个实现。

    Qt's Documentation on MapItemGroup

  • 在下面的代码中:
  • delegateCircle、delegateRect 工作正常
  • delegateGroup 不显示

  • 一个简单的实现:
    import QtQuick 2.10
    import QtPositioning 5.6
    import QtLocation 5.9
    import QtQuick.Controls 2.3 as QQc2

    QQc2.ApplicationWindow {
    visible: true
    width: 640
    height: 480
    // Some list model
    ListModel {
    id: someModel
    ListElement {lat: 0; lon: 0}
    ListElement {lat: 5; lon: 0}
    ListElement {lat: 5; lon: 5}
    ListElement {lat: 0; lon: 5}
    }

    Map {
    id: map
    anchors.fill: parent
    plugin: Plugin {name: "osm"}
    center: QtPositioning.coordinate(2.5, 2.5)
    zoomLevel: 6

    // Some views to test the model
    // delegateCircle, delegateRect work fine
    // delegateGroup is not displayed
    MapItemView {
    model: someModel
    delegate: MapCircle {
    id: delegateCircle
    border.color: "red"
    border.width: 1
    center: QtPositioning.coordinate(model.lat, model.lon)
    radius: 50*1000
    }
    }

    MapItemView {
    model: someModel
    delegate: MapRectangle {
    id: delegateRect
    border.color: "green"
    border.width: 3
    topLeft : QtPositioning.coordinate(model.lat+1, model.lon-1)
    bottomRight : QtPositioning.coordinate(model.lat-1, model.lon+1)
    }
    }

    MapItemView {
    model: someModel
    delegate: MapItemGroup {
    id: delegateGroup
    MapCircle {
    id: innerCircle
    border.color: "green"
    border.width: 3
    center: QtPositioning.coordinate(model.lat, model.lon)
    radius: 75*1000
    }

    MapRectangle {
    id: innerRect
    border.color: "red"
    border.width: 6
    topLeft : QtPositioning.coordinate(model.lat+2, model.lon-2)
    bottomRight : QtPositioning.coordinate(model.lat-2, model.lon+2)
    }
    }
    }
    }
    }

    上述代码的输出是:
    The output of the QML code
  • 我还尝试使用 MapItemGroup 作为 MapQuickItem 类型的 sourceItem。这也不起作用。

  • 我要达到的目标:

    好。我需要使用 MapItemView 绘制多个 map 项。欢迎任何其他解决方案/方法(包括 c++ 后端程序)。

    编辑

    谢谢@GrecKo 和@Yoann。您的两种解决方案都有效。但是,我选择继续使用 Instantiator,因为它更适合我的应用程序。

    看到您的解决方案后,我也发现这很有趣: a developer's discussion on populating a model using Repeater and Instantiator .

    最佳答案

    那是fixed in Qt 5.12 , 所以你可以像现在一样使用你的代码

    import QtLocation 5.12
    import QtPositioning 5.12

    关于qt - 在 QML 中,(如何)我可以将 MapItemGroup 作为 MapItemView 的委托(delegate)组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49513803/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com