来自 C++ 模型的 QML MapPolygon

2023-12-23

我想动态添加/删除/编辑MapPolygon在 QML 地图应用程序中。我还有一些其他创建多边形的工作(文件导出/导入等),所以我认为我应该使用MapItemView使用 C++ 模型提取多边形数据。

我尝试使用自己的基于 QObject 的对象创建自己的模型:

Object:

class MODELSHARED_EXPORT Polygon : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QList<QGeoCoordinate> coordinates READ coordinates WRITE setCoordinates NOTIFY coordinatesChanged)

public:
    explicit Polygon(QObject *parent = nullptr);

    QList<QGeoCoordinate> coordinates() const;

    void setCoordinates(QList<QGeoCoordinate> coordinates);
signals:
    void coordinatesChanged(QList<QGeoCoordinate> coordinates);

public slots:
    void addCoordinate(const QGeoCoordinate & coordinate);

private:
    QList<QGeoCoordinate> m_coordinates;
};

Model:

class MODELSHARED_EXPORT PolygonModel : public QAbstractListModel
{
    ...

    QVariant data(const QModelIndex &index, int role) const override
    {
        if(index.row() >= 0 && index.row() < rowCount()) {
            switch (role) {
            case CoordinatesRole:
                return QVariant::fromValue(m_data.at(index.row())->coordinates());
            }
        }

        return QVariant();
    }

public slots:
    void addArea()
    {
        beginInsertRows(QModelIndex(), rowCount(), rowCount());
        m_data.append(new Polygon(this));
        endInsertRows();
    }

    void addPolygonCoordinate(const QGeoCoordinate &coordinate, int index)
    {
        if(index == -1) {
            index = rowCount() - 1;
        }

        m_data.at(index)->addCoordinate(coordinate);
        dataChanged(this->index(0), this->index(rowCount() - 1));
        qDebug() << "Adding coordinate..." << coordinate;
    }

private:
    QList<Polygon*> m_data;
};

And QML:

MapItemView {
        id: AreaView
        delegate: AreaPolygon {
            path: coordinates
        }
        model: cppPolygonModel
    }

面积多边形.qml

MapPolygon {
    id: areaPolygon
    border.width: 1
    border.color: "red"
    color: Qt.rgba(255, 0, 0, 0.1)
}

但不幸的是,多边形没有出现在地图上(当坐标成功添加到对象 QList 属性中时)。我认为 Object QList addidion 从 View 中不可见,因此 MapItemView 不刷新。

有更好的选择吗?也许我应该使用模型QGeoPolygon物体? (如何?)


你必须返回QVariantList代替QList<QGeoCoordinate>:

if(index.row() >= 0 && index.row() < rowCount()) {
    switch (role) {
    case CoordinatesRole:
        QVariantList coorvariant;
        for(const QGeoCoordinate & coord: m_data.at(index.row())->coordinates()){
            coorvariant.append(QVariant::fromValue(coord));
        }
        return coorvariant;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 C++ 模型的 QML MapPolygon 的相关文章

  • Qt5和QML:如何使用WebEngine Quick Nano浏览器自动输入用户名和密码

    我正在使用编写一个小应用程序Qt and QML使用 Qt 文档中的示例WebEngine Quick Nano 浏览器 https doc snapshots qt io qt5 5 9 qtwebengine webengine qui
  • 如何在 Qt Creator 中编辑 QtWebKit 的右键上下文菜单?

    好吧 这是我的困境 我正在使用 Qt Creator 制作一个使用 Webkit 的简单应用程序 我认为 Qt Creator 会有一种简单的方法来使用信号和槽编辑器编辑右键单击上下文菜单 但事实证明这不是真的 我知道 webkit 有与上
  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • 在 Qt 服务器上验证用户身份

    我正在尝试使用 C QtTcpSocket 为个人项目 多人国际象棋游戏 实现身份验证系统 我的朋友建议了一种验证用户的方法 但我想问是否有更简单或更好的方法 来自 Python 背景 做这个项目主要是为了加深对 C 的理解 我将发布我朋友
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 如何在Qt 5中的paintEvent上使用mouseMoveEvent?

    我是 Qt 和 c 的新手 所以我遇到了一些困难 我正在尝试创建一个小部件 它可以获取 mouseMoveEvent 位置并在鼠标位置的像素图上绘制椭圆 下面你可以看到代码 include myimage h include
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染
  • QML 中可重用的字体属性[重复]

    这个问题在这里已经有答案了 在 QML 中 我希望能够定义一组字体属性以进行简单的语义重用 例如 代替 Text text This is a header font family Encode Sans weight Font Black
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • 覆盖 QWebView 中的页面回复

    我试图在 Qt 的 QWebView 中拦截页面 表单请求 并在某些情况下使用替代内容进行响应 QNetworkReply ngcBrowser createRequest Operation operation const QNetwor
  • 连接到 QNetworkReply::error 信号

    我正在使用 Qt5 的新连接语法 QNetworkReply 有一个名为error http qt project org doc qt 5 0 qtnetwork qnetworkreply html error 2还有一个函数叫做err
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • QML 列表视图拖放

    我想创建两个 qml 列表视图 可以执行两个功能 拖放一个列表中的项目以更改项目的顺序 跨列表拖放项目 项目将从一个列表中删除并添加到另一个列表中 根据 Qt 文档中的拖放示例 我决定创建两个访问同一列表模型的列表视图 列表模型中的每个项目
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某

随机推荐

  • 任何人都知道用 *[class] 标记一个类的目的是什么

    今天我收到了一位客户发来的文件 该文件是电子邮件模板 在移动版本的 css 中 所有类规范均以 class 开头 e g class centertext somespec 0 有人知道将其添加到课程中的目的是什么吗 thanks 有一个雅
  • Base64 编码:非法 Base64 字符 3c

    我正在尝试将 xml 格式的数据解码为字节base64我遇到了问题 我的方法是在java中 它需要一个String数据并将其转换为bytes就像下面这样 String data string of data in xml format by
  • 将 Common Lisp 代码移植到 Clojure

    将 Common Lisp 应用程序移植到 Clojure 有多实用 更具体地说 Common Lisp 中存在哪些 Clojure 中不存在的功能 需要重写 有一个clojure org 上的列表 http clojure org lis
  • Go中如何进行除法运算

    我正在尝试用 Go 进行简单的除法 fmt Println 3 10 这会打印 0 而不是 0 3 这有点奇怪 有人可以分享一下这背后的原因是什么吗 我想在 Go 中执行不同的算术运算 Thanks 二元运算的操作数3 10是无类型常量 规
  • 了解 RTF 并使用 vb.net 进行编辑

    我的 vb net 表单中有这个 RichTextbox 我想当用户单击按钮时 例如加粗所选文本 我将如何执行此操作 另外 我不想使用标准的 vb net 表达式 例如RichTextBox1 SelectedText Font Bold
  • QString 的最大大小

    我在 Ubuntu 16 04 64 位架构上使用 Qt 5 9 我有一个要求 我需要从一个文件中获取输入 该文件的字符范围在 10 8 范围内 不幸的是 将文件分成几部分并进行处理并不是一种选择 因为我需要文件中的全部数据来操作我的代码
  • 如何使用单个 Service Worker 来安装多语言 Angular PWA?

    我已经准备了本地化语言版本的应用程序 为此 我使用了原生 Angular i18n 模块 它准备了两个应用程序包 每个包都有适当的语言 该应用程序的每个版本都可以在我的 nginx 服务器上的单独位置下使用 myapp com en mya
  • Indy 服务器支持 SSL 2,但不应该

    印地德尔福 10 1 柏林 我的客户检查了 HTTPS 连接 使用 Qualys SSL Labs 该报告指出 此服务器支持 SSL 2 以及其他警告 但我猜它们与此相关 使用的代码如下 SSLIOhandler TIdServerIOHa
  • mget 无法像 get 一样获取原始函数

    我可以用get获得原始函数 例如 get Primitive 然而 mget failed mget Error value for not found 为什么 如何解决这个问题 默认为get是使用inherits TRUE 我认为 基于文
  • 获取 ToolStripDropDown 对象的下拉状态

    尽管查看了几次 我在文档中找不到任何返回下拉列表是否打开的简单状态的内容 我想为工具条子菜单创建一个单击事件 该事件将根据其状态打开或关闭项目下拉列表 我可能会忽略它 因为它看起来是一个基本的方法 on the 工具栏下拉菜单 http m
  • 无边框窗口和桌面尺寸相同时闪烁

    我正在尝试创建一个充满屏幕的无边框窗口 http pcgamingwiki com wiki Glossary 3aBorderless fullscreen windowed带有 OpenGL 视口 问题是 当我将窗口和视口设置为与桌面大
  • CI 服务器比较? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在寻找不同的比较持续集成 http en wikipedia org wiki Continuous integration CI 服务器
  • 如何并行执行 2 个 Observable,忽略它们的结果并执行下一个 Observable

    我必须并行执行 2 个 observable 不关心它们的输出 当它们都完成时 gt 运行另一个 observable 这是我的解决方案 但我觉得还有更好的解决方案 rx Observable
  • 如何利用 Robot Framework 编写正则表达式来查找/替换各种日期字符串

    我使用机器人框架进行自动化测试 将文件读入变量 我正在解析该变量的各种日期格式 并尝试使用正则表达式将日期替换为当前日期 我正在努力解决的是让正则表达式在机器人框架中工作 我已经在各种网站 如 pythex 和 regex101 中编写了正
  • 函数重载和模板推导优先级

    考虑以下函数声明 template
  • 什么是不变性以及为什么我应该担心它?

    我读过几篇关于不变性的文章 但仍然没有很好地理解这个概念 我最近在这里创建了一个线程 其中提到了不变性 但由于这本身就是一个主题 所以我现在正在创建一个专门的线程 我在过去的帖子中提到 我认为不变性是使对象只读并赋予其低可见性的过程 另一位
  • Django 1.2:登录问题(GET参数:next)

    我有一个关于 django 的新问题 这些天我发布了一个丢失的问题 这是我的情况 我有一个自定义登录视图 在设置中注册为登录 url 我在其中对用户进行身份验证 我选择创建自定义视图以便能够添加消息和日志记录 身份验证工作正常 但我对 GE
  • 如何在 RSpec 中包含多个模块?

    我不确定如何将多个模块包含到 RSpec 中 所以让我描述一下我的情况 Under app helpers我有两个带有帮助程序的文件 其中包含模块ApplicationHelper and MailersHelper 尽管这些是我在视图和邮
  • Android 中的 Glide 多种变换

    我一直在使用 Glide 在我的应用程序中加载图像 我有一个自定义转换 我在加载图像时使用它ImageView 问题是我想应用我的自定义转换 centerCrop两者都在获取的图像上 但 Glide 仅使用我的自定义转换并在中显示图像Ima
  • 来自 C++ 模型的 QML MapPolygon

    我想动态添加 删除 编辑MapPolygon在 QML 地图应用程序中 我还有一些其他创建多边形的工作 文件导出 导入等 所以我认为我应该使用MapItemView使用 C 模型提取多边形数据 我尝试使用自己的基于 QObject 的对象创