如何循环 QAbstractItemView 索引?

2024-03-28

我想开火QAbstractItemView::doubleClicked以编程方式为具有特定文本的项目插入槽。我想用QAbstractItemView如果可能的话,类而不是它的实现。

此任务归结为循环项目和比较字符串。但我找不到任何方法可以给我一切QModelIndexes.唯一可以提供任何QModelIndex不带参数的是QAbstractItemView::rootIndex。但当我调查QModelIndex文档,我再次找不到访问它的孩子和兄弟姐妹的方法。

那么如何访问所有QModelIndexes in QAbstractItemView?


索引由模型提供,而不是由视图提供。该视图提供了rootIndex()指示它认为模型中的哪个节点为根;它可能是一个无效的索引。否则与数据无关。你必须遍历模型本身 - 你可以从view->model().

以下是模型的深度优先演练:

void iterate(const QModelIndex & index, const QAbstractItemModel * model,
             const std::function<void(const QModelIndex&, int)> & fun,
             int depth = 0)
{
    if (index.isValid())
        fun(index, depth);
    if ((index.flags() & Qt::ItemNeverHasChildren) || !model->hasChildren(index)) return;
    auto rows = model->rowCount(index);
    auto cols = model->columnCount(index);
    for (int i = 0; i < rows; ++i)
        for (int j = 0; j < cols; ++j)
            iterate(model->index(i, j, index), model, fun, depth+1);
}

函子fun为模型中的每个项目调用,从根开始并按深度-行-列顺序进行。

E.g.

void dumpData(QAbstractItemView * view) {
    iterate(view->rootIndex(), view->model(), [](const QModelIndex & idx, int depth){
        qDebug() << depth << ":" << idx.row() << "," << idx.column() << "=" << idx.data();
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何循环 QAbstractItemView 索引? 的相关文章

  • 没有什么可以帮助解决 Qt 中的“对 vtable 的未定义引用”

    我无法构建此错误 未定义对 CustomUndoStack 的 vtable 的引用 这是代码 class CustomUndoStack public QObject Q OBJECT public int main int argc c
  • PyQt 与 PySide 比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前在 Linux 上的 Qt 重型 C Python 环境中开发了许多应用程序 并根据需要移植到 PC Mac 我使用嵌入 C 中的 Pyt
  • 将 Homebrew 安装的 Qt 添加到 Mac 上的 Qt Creator

    我通过安装 Qt5 和 Qt Creatorhomebrew https brew sh 由于它们是彼此独立安装的 因此 Qt 不会自动添加到 Qt Creator 中的已知 Qt 安装列表中 我以为添加安装很简单 但是 由于自制程序将所有
  • Qt5 链接器错误:找不到版本“Qt_5”

    1 问题 我正在尝试构建开源motorcar https github com evil0sheep motorcar在 Arch Linux 机器上从头开始项目 Motorcar 是一款 Linux VR 窗口管理器 可与 Oculus
  • 当鼠标位于 Qt 窗口的自定义小部件上时,如何移动整个窗口?

    假设我有一个自定义小部件并将其添加到 qt 的主窗口中 如您所见 红色区域是自定义小部件 我想要做的是 当鼠标在红色区域按下并移动时 整个窗口也会移动 我知道如何简单地实施mousePressEvent and mouseMoveEvent
  • 如何在 Qt 中实现 QHoverEvent?

    我正在学习 Qt 和 C 我已经成功地实现了信号和槽来捕获标准事件 例如ButtonPushed 等等 但是 我希望当我将鼠标悬停在鼠标上并移出鼠标时调用一个函数QLabel 看起来像QHover事件 http doc qt io qt 4
  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • 如何使用 qt 在键盘上仅显示数字

    我在我的项目中使用 Qt Quick Virtual Keyboard 当我单击一个对象时 我想显示键盘但只显示数字 我怎样才能做到这一点 这就是我想做的 您可以使用Qt ImhFormattedNumbersOnly http doc q
  • Qt、QML 和 Windows 8 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直对Qt框架引入的QML很好奇 但从未有机会使用它 但现在随着 Windows 8 的到来 基于旧式小部件的界面将变得过时 只是我
  • 如何在子进程期间和之后执行操作

    我有一个调用子程序的程序 当子程序使用 Popen 运行时 我需要禁用运行按钮并启用停止按钮 但是 由于Popen打开了一个新进程 因此程序完成后应该打印的内容会立即打印出来 我尝试添加self p communicate after Po
  • 如何在 Qt 中使用 QTabWidget 创建多行选项卡?

    我尝试使用 QTabWidget 创建一个多行选项卡 如下所示 我也设置了tabPosition 南但我不能有多行选项卡 因为所有选项卡都是水平的 所有选项卡都在一行中 而不是多行 这些是我得到的标签 我读过了这个帖子 https stac
  • QNetworkManager 默认情况下是否接受压缩回复?

    我在用Q网络管理器 https doc qt io qt qnetworkaccessmanager html从服务器获取文件 但是我不知道文件在传输过程中是否使用标准 gzip 压缩进行压缩 如果不是 如何让它们下载压缩文件 我该如何去检
  • 安装 PyQt

    我正在尝试在我的 mac 上安装 PyQt 以便可以安装 python Ghost 我已经安装了Qt和SIP 我已经下载了 PyQt 但是当我运行时 python configure ng py 我收到以下错误 Error Use the
  • 无法在Mac上安装qwt设计器插件

    我无法在 Mac 上安装 qwt 设计器插件 我已经下载了 v 6 1 3 并成功完成了 qmake make 和 sudo make install 问题是 在 usr local qwt 6 1 3 lib 下 我只有文件 qwt fr
  • 为什么我的 QGestureRecognizer 收不到触摸事件?

    上下文 我正在尝试创建一个类似推子的小部件 它可以在同一视图中具有多个实例 每个实例都可以由不同的手指同时控制 我想用Qt的手势识别系统 http qt project org doc qt 4 8 gestures overview ht
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • qt 读取就绪信号

    我正在尝试与运行 1996 年处理器的设备建立串行连接 这意味着数据传输回我可能需要几秒钟的时间 我知道readyRead每次有新数据可用时都会生成信号 但我的问题是生成多长时间 这也是我可以测试就绪读取是否较低的一种方法 因为如果当它们不
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • Qt 5.4/Qml:防止绑定循环

    我有一个全局单例 设置 它保存应用程序设置 当我尝试运行以下代码时 我得到一个QML CheckBox Binding loop detected for property checked CheckBox checked Settings
  • C++ 是否可以延迟常量静态成员的初始化?

    我正在使用 Qt 但这是一个通用的 C 问题 我的情况很简单 我有一个课程Constants它有一个常量静态成员 我希望在进行某些函数调用后对其进行初始化 常量 h ifndef CONSTANTS H define CONSTANTS H

随机推荐

  • 使用CSS的圆形文本段落[重复]

    这个问题在这里已经有答案了 我一直在寻找一个关于如何将一段文本放置在圆圈内的体面且快速的解决方案 我发现有两种解决方案 解决方案1 浮动倍数div与文本左侧和右侧的文本高度相同 并通过更改 divwidth您可以调整文本的剩余空间 解决方案
  • SpriteKit和粒子碰撞

    我有一个粒子发射器 我想在粒子碰撞某些物理体时检测到它 SpriteKit API 中是否有本地方法可以做到这一点 或者我是否需要 作弊 单个粒子不能碰撞 不是用物理学 也不是任何其他方式 您甚至无法获得有关单个粒子的任何信息 您无法访问它
  • 2个脚本(FitVids.js、Vimeo.js)一起kill调用函数播放视频,导致:VimeoAPI不是函数

    Update以下 好吧 我这里遇到了问题 我使用这个优秀的 vimeo 类来让我的生活更轻松 http www josh ho com vimeo class http www josh ho com vimeo class 源代码在这里
  • GitHub Actions:在可重用工作流程中引用环境机密

    我已经能够在可重用工作流程中传递和引用组织和存储库机密 没有任何问题 问题 错误 是环境特定的秘密没有被传递 我尝试明确并列出所有这些并使用 秘密 继承 如果我使用 秘密 继承 我不必显式列出任何秘密 但是 引用时环境秘密为空 将它们全部列
  • 带有静态单元格的 UITableView 不会出现

    我使用 Storyboards 选项卡视图模板 创建了一个新的 Xcode 项目 我在故事板中添加了几个视图控制器 并希望使用带有静态单元格的 UITableView 我创建了它 但是当我在模拟器中运行时 单元格不会出现 除了这个故事板文件
  • Shinydashboard:Google 地点自动完成。 InvalidValueError:不是 HTMLInputElement 的实例

    我想放一个shinydashboard在一起 并有一个 Google Places 搜索框作为文本输入 下面的代码以常规方式运行shiny页面 但抛出一个InvalidValueError not an instance of HTMLIn
  • InnoDB:发现重复索引 - 这很糟糕吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 最近我们的 Magento 商店变得非常慢 我们真的不知道为什么 就在今天 我在检查数据库时注意到超过 900 个索引是相同的重复项 即存在两个 我的
  • 首次启动时无法识别 iCloud 键值存储

    我的应用程序使用 iCloud 键值存储 在多个设备之间同步唯一 ID 在应用程序首次启动时 如果它确实必须工作 那么就可以接受 看起来设备在首次启动时还不熟悉 iCloud 的值 只有在应用程序安装并运行一段时间后才熟悉 我在应用程序主视
  • Java:生成具有透明度的缩略图

    我在生成具有 Alpha 通道 透明度 的图像缩略图时遇到问题 我使用的代码是这样的 public void saveThumbnail File file String imageType if bufferedThumb null re
  • 上传错误 - 无法将 apk 文件上传到 Google Play 开发者控制台?

    我在 Google Play 上有一些应用程序已经有一段时间了 但我已经几个月没有发送更新了 现在我尝试发送更新 但在上传 apk 文件时出现上传错误 我尝试过使用另一个应用程序和另一台计算机 但出现了同样的错误 过去 5 天我一直在尝试解
  • 根据所选父节点显示子节点

    嗨 我一直在寻找这个问题的答案 但找不到答案 我只有 3 个月的使用 python django 经验 所以请原谅我的虚拟问题 我使用 django mptt 来显示一个简单的嵌套集导航 ul class root recursetree
  • 使用 LINQ 实体框架的 LEFT JOIN 或 RIGHT JOIN

    尝试使用 Linq 加入 我应该用什么 左连接还是右连接 APPLICANT TABLE PROFILE TABLE APPLICANT ID profile id Applicant Name profile id Applicant N
  • git 空格问题

    空白冲突很糟糕 空白最终对我来说是一种可怕的痛苦 在使用 git 时 git config apply whitespace strip 似乎增加了你发生冲突的机会 当你脱掉 不需要的空白 然后其他合作者会看到被剥离的空白 空格作为他们提交
  • 谷歌登录可以在模拟器中使用,但不能在手机中使用

    我在使用 Firebase 实施 Google 登录时遇到了非常严重的问题 我可以使用我的模拟器 Android 7 0 为 x86 64 构建的 SDK 登录 但如果我将项目上传到手机 Android 6 0 我将无法使用 Google
  • 访问打字稿联合类型中的不同属性

    我正在创建一个处理数据库中的对象的函数 我有两种不同的数据结构 其中相同的属性具有不同的名称 我无法改变这一点 所以我必须用 JavaScript 来处理它 这些对象还有其他差异 但这对此功能并不重要 我想对两种不同类型的对象使用相同的函数
  • iOS 蓝牙应用程序仅在后台模式下“由于信号 9 而终止”

    我正在 Objective c 中开发一个 IOS 应用程序 它显示来自蓝牙 BLE 的心率以及相应的图形 如果应用程序在前台运行 则一切都可以正常分叉 没有任何问题 但是 如果应用程序进入后台模式 BLE 测量仍然会继续 我正在使用 使用
  • Lollipop Android 锁屏小部件

    棒棒糖中的锁定屏幕小部件是否有任何更改 虽然官方文件明确显示没有变化 但是 http www extremetech com computing 192112 android 5 0 lollipop all details and fea
  • 我可以使用 SocketCAN 读取 CRC 和 ACK 位吗?

    我正在寻找一种方法 通过 PiCan2 将消息从一个 Raspberry Pi 发送到另一个 并接收回来以读取 CRC 和 ACK 位 我搜索了文档但找不到这样的选项 我可能错过了什么吗 你不直接处理CRC and ACK 但当此类事件发生
  • Java 中的 HTTP 标头编码/解码

    自定义 HTTP 标头被传递到 Servlet 应用程序以进行身份 验证 标头值必须能够包含重音符号和其他非 ASCII 字符 因此必须采用某种编码 最好是 UTF 8 控制身份验证环境的开发人员向我提供了这段 Java 代码 String
  • 如何循环 QAbstractItemView 索引?

    我想开火QAbstractItemView doubleClicked以编程方式为具有特定文本的项目插入槽 我想用QAbstractItemView如果可能的话 类而不是它的实现 此任务归结为循环项目和比较字符串 但我找不到任何方法可以给我