QML:原始模型中的动态视图重新排序

2024-03-13

使用此 Qt 教程通过拖动视图项来实现 QML 动态视图排序:QML 动态视图排序教程 https://doc.qt.io/qt-5/qml-dynamicview-tutorial.html。原始底层模型是QAbstractListModel在我们的例子中是后代。模型将数据存储在QList<QObject*> objectList;字段类型。工作正常,但是代理中的项目排序发生了变化DelegateModel only.

如何自动更改原始底层模型中的项目顺序以及顺序重要的其他 C++ 和 QML 消费者?或者我可以以其他方式从 C++ 访问一些结果(排序)列表模型模型吗?

谢谢你的帮助!


In the QML 动态视图排序教程 3 https://doc.qt.io/qt-5/qtquick-tutorials-dynamicview-dynamicview3-example.html我替换的例子visualModel.items.move()打电话给我的ObjectListModel::move()像这样的方法:

ObjectListModel :公共 QAbstractListModel:

void ObjectListModel::move(int from, int to)
{
    if(0 <= from && from < count() && 0 <= to && to < count() && from != to) {
        if(from == to - 1) // Allow item moving to the bottom
            to = from++;

        beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
        objectList.move(from, to);
        endMoveRows();
    }
}

委托组件:

DropArea {
    anchors { fill: parent; }

    onEntered: {
        let from = drag.source.DelegateModel.itemsIndex
        let to = mouseArea.DelegateModel.itemsIndex
        objectListModel.move(from, to)
    }
}

以上非常适合ListView and ObjectListModel本身 - 我已经检查过:项目(以及对象)移动正确,索引正确,C++消费者工作正常并正确考虑新订单,等等。


然而另一位消费者喜欢MapItemView之后无法使用该模型beginMoveRows/endMoveRows调用:移动的项目在地图上消失,并且对项目的其他操作会使应用程序崩溃。

 Map {
     ...
     MapItemView {
         model: objectListModel

         delegate: SomeItemIndicator {
         }
     }
 }

已报道QTBUG-81076 https://bugreports.qt.io/browse/QTBUG-81076错误,已确认。

解决方法:

目前找到解决方法:创建第二个重复模型,每次添加/删除/移动(重新排序)时,第一个模型中的每次更改都会完全替换内容。以上作品自beginResetModel/endResetModel正确适用于MapItemView. So MapItemView现在仅使用第二种模型。因此,每次第一个模型更改时,第二个模型都会调用此方法:

QObjectList ObjectListModel::swapObjectList(const QObjectList& newlist)
{
    QObjectList oldlist(_objectList);
    beginResetModel();
    _objectList = newlist;
    endResetModel();
    return oldlist;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QML:原始模型中的动态视图重新排序 的相关文章

  • Android ListView数组索引过滤后越界

    我认为这是专家的问题 我接到电话getView with positon 出界来自ListView数据列表 当我使用适配器过滤器时会发生这种情况 过滤器publishResults 方法使用小于原始列表的过滤列表填充数据 当新的过滤列表时似
  • 如何创建QWidget的屏幕截图?

    我在 Qt Creator 中做作业 在其中绘制 QWidget 并且需要保存此 QWdiget 的某些部分 我试图解决这个问题 QPixmap pixmap pixmap copy rectangle rectangle is part
  • ListView ColumnHeader.Name 为空字符串

    我创建了一个 WinFormsListView作为具有四列的详细视图 我在设计器中为每一列指定了名称 但是在访问每一列时ColumnHeader通过ListView Columns属性 我找到每个ColumnHeader Name是一个空字
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • 如何在 Flutter 中更新 AnimatedList 中的数据

    如何在 Flutter 中更新 AnimatedList 中的数据 添加 删除行 我可以在 ListView 中通过更新支持数据并调用来完成此操作setState 例如 setState data insert 2 pig 不过 在 Ani
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • Qt - 如何粘合两个窗口并将它们移动在一起?

    就像qmmp Qt 音乐播放器ui设计一样 这两个或三个窗口实际上在同一个窗口中 因为只有一个dock图标 并且这些窗口可以一起移动并相互附着 我看了源码 好像有用QDockWidget 但我真的不知道如何获得它的细节 当您手动移动辅助窗口
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 在 Qt5 中,是否需要 Q_INVOKABLE 来从 QML 调用公共 QObject 函数?

    我刚刚意识到我可以调用暴露于 QML 的对象的几乎任何函数 现在我对 Q INVOKABLE 很好奇 Qt5docs http doc qt io qt 5 qtqml cppintegration exposecppattributes
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • Qt:在多个布局中使用一个小部件

    我有一个 QTabBar 所有选项卡都应该有相同的小部件 layout1 gt addWidget w layout2 gt addWidget w 然而打电话addWidget第二次导致该小部件在第一个布局中消失 有没有办法使用一个小部件
  • Android ListView setSelection() 似乎不起作用

    我有一个ListActivity实现onListItemClick 并调用doSomething 类的功能 后者包含l setSelection position where l is the ListView object 现在有一个on
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • 如何检测QTableView中的双击

    我正在使用 PyQt 创建 GUI 应用程序 在继承自 QTableView 的视图中 需要检测用户双击行时选择的行 该表可以排序 但不能编辑 我该怎么做 注意 尝试了 doubleClicked int 信号 它是由鼠标按钮发出的 而不是
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因

随机推荐

  • Haskell 的“尾部”函数的时间复杂度是多少?

    当我在阅读 Haskell 教程时 我心里想 Haskell 的时间复杂度是多少tail功能有 以及为什么 我在任何文档中都找不到答案 我猜想对于一个大小为 n 的列表 tail函数将是O n 即将尾部复制到一个新列表并返回该列表 但话又说
  • AndEngine GLES2 中未找到 SimpleLevelLoader 类

    我是 AndEngine 的新手 工作时从AndEngine 教程 http www matim dev com full game tutorial part 11 html 未找到以下类 我尝试从 AndEngine 导入所有库 但仍然
  • 将 DataTable 转换为 JSON,每行包含键

    我认为以下将是一项非常常见的任务 并假设会有一个简单的解决方案 但我找不到 如果我有以下结构的数据表 ID Name Active ID1 John TRUE ID2 Bill FALSE 我想将其序列化为 JSON 对象 其中 ID 列是
  • 如何将浮点数数组转换为 byte[] 并返回?

    我有一个浮点数组需要转换为字节数组并返回浮点 任何人都可以帮助我正确地执行此操作吗 我正在使用 bitConverter 类 发现自己在尝试附加结果时陷入困境 我这样做的原因是为了可以将运行时值保存到 IO 流中 如果重要的话 目标存储是
  • jQuery noConflict() 问题

    因此 我正在一个每次加载页面时都会注入 jQuery 1 2 6 的平台上进行开发 我开发的页面使用 jQuery 1 4 2 因此当我的页面加载时 我的页面上有 2 个 jQuery 实例 为了避免任何冲突 我在页面外部的 JS 文件中包
  • 当 WHERE 子句中只有单个列时,SQL Server 是否会使用复合索引?

    假设我有一张桌子 CREATE TABLE Users Id INT IDENTITY 1 1 FirstName VARCHAR 40 LastName VARCHAR 40 查询通常是开启的名 or LastName 而且还关于名 an
  • Angular 8 - 服务注入和工厂模式

    我已经简要阅读了几篇文章和官方 Angular 指南 但它们似乎无法帮助我解决我的任务 这就是我想要的和所做的 假设我有带有产品列表页面的 Angular 应用程序 此外 这个应用程序将来还会有类别列表页面和一些N列表页面 正如您所看到的
  • MEAN 堆栈上的登录系统架构?

    我正在 MEAN 堆栈 MongoDB Express AngularJS 和 node js 上开发一个 Web 应用程序 我正在开发一个登录系统 并且还将保护一些 Angular 路由 以便只有登录的用户才能访问它们 我正在尝试思考实现
  • 计算数字根,有更好的方法吗?

    这就是我计算整数的数字根的方法 import acm program public class Problem7 extends ConsoleProgram public void run println This program cal
  • 执行字符串?

    我想执行一个字符串 但是发现没有exec朱莉娅函数 a 1 println exec a ERROR exec not defined 有没有办法在 Julia 中执行字符串 最初的问题是我试图记录变量列表 thingsToLog a b
  • jQuery 调整大小至纵横比

    我如何将 jQuery 中的图像大小调整为一致的宽高比 例如设置最大高度并正确调整宽度大小 谢谢 这是一个有用的函数 可以满足您的要求 jQuery fn fitToParent function this each function va
  • 如何获取代表一个月第一天的日期?

    我需要脚本中的功能 使我能够将日期插入表中 插入日期格式需要什么SQL 01 08 2010 00 00 00 其中日期是当月的第一天 我需要什么才能更改可以指定月份值的订单 谢谢 最好和最简单的方法是使用 SELECT DATEADD m
  • 用户和地址应该位于不同的表中吗?

    目前我的用户表有以下字段 Username Password Name Surname City Address Country Region TelNo MobNo Email 会员资格到期 会员数量 DOB Gender Blocked
  • Android:通过带有正文的 Intent 发送短信并返回。

    我正在尝试通过意图发送短信 我想在消息中添加正文 用户按下后send我想返回应用程序 我已经添加了额外的内容sms body and exit on sent 但是当我使用它们时 短信都会出现而没有正文 如果我不使用exit on sent
  • Java Observable 类的替代品? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我从 C 世界转向 Java 在 C 世界中 观察者模式是作为一流语言构造实现的event关键词 我看到Java有Observable
  • 如何一次选择数组中的所有项目,并向它们添加类

    我希望这个函数通过给它们 css hidden 属性来隐藏 html 中的按钮 我已经尝试过 0 1 2 3 4 但它 没有按预期工作 这段代码可以工作 但我想知道是否有更有效的方法来做到这一点 function hideButtons v
  • 尚未为 Microsoft 报告服务中的数据源“Product_Detail”提供数据源实例

    我正在尝试在报告中显示记录 数据位于数据集中 但这与他们无关 当表单加载时 它会显示报告布局 但是当我点击按钮时它显示错误 下面是我的代码 using Microsoft Reporting WinForms
  • 沙箱来执行可能不友好的Python代码[重复]

    这个问题在这里已经有答案了 假设互联网上有一台服务器 可以向其发送一段代码进行评估 在某个时刻 服务器获取已提交的所有代码 并开始运行和评估它 然而 在某些时候它肯定会遇到一些邪恶的程序员发送的 os system rm rf 除了 rm
  • 使用 php 保存可编辑表中的值

    Hi I have a table generated from php it is editable I want to save edited values to database I have no Idea how can I do
  • QML:原始模型中的动态视图重新排序

    使用此 Qt 教程通过拖动视图项来实现 QML 动态视图排序 QML 动态视图排序教程 https doc qt io qt 5 qml dynamicview tutorial html 原始底层模型是QAbstractListModel