如何向 QFileSystemModel 添加自定义角色

2024-04-05

我想向 QFileSystemModel 添加自定义角色(可能是派生模型)。我想使用此角色来保存复选框的选中状态,该状态显示在自定义委托中的文件名旁边。如何才能做到这一点?


我已经使用过使用示例Qt Quick Controls - 文件系统浏览器示例 https://doc.qt.io/qt-5.10/qtquickcontrols-filesystembrowser-example.html删除选择的部分。

步骤如下:

  • 添加新角色roleNames:

    QHash<int,QByteArray> roleNames() const Q_DECL_OVERRIDE
    {
        QHash<int, QByteArray> result = QFileSystemModel::roleNames();
        result.insert(SizeRole, QByteArrayLiteral("size"));
        result.insert(DisplayableFilePermissionsRole, QByteArrayLiteral("displayableFilePermissions"));
        result.insert(LastModifiedRole, QByteArrayLiteral("lastModified"));
        result.insert(Qt::CheckStateRole, QByteArrayLiteral("checkRole"));
        return result;
    }
    
  • 创建一个容器来存储选择的信息,在本例中我将使用QMap:

    QMap<QPersistentModelIndex, Qt::CheckState> m_checks;
    
  • 覆盖data()方法,如果存储在容器中则返回状态,如果不返回Qt::UnChecked作为默认值:

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE
    {
        if (index.isValid() && role >= SizeRole) {
            ...
        }
        else if (role == Qt::CheckStateRole) {
            QPersistentModelIndex pix(index);
            if(m_checks.contains(pix)){
                return m_checks[pix];
            }
            return Qt::Unchecked;
        }
        return QFileSystemModel::data(index, role);
    }
    
  • 覆盖setData()方法,如有必要,您必须修改该方法并创建数据。

    bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole){
        if(role == Qt::CheckStateRole && index.isValid()){
    
            Qt::CheckState current = value.value<Qt::CheckState>();
            if(m_checks.contains(index)){
                Qt::CheckState last = m_checks[index];
                if(last == current)
                    return false;
                m_checks[index] = current;
            }
            else{
                m_checks.insert(index, current);
            }
            emit dataChanged(index, index, {role});
            return true;
        }
        return QFileSystemModel::setData(index, value, role);
    }
    
  • 我添加了一个新列,在其中建立了代表CheckBox我用了onCheckedChanged槽使用设置值setData()方法,将QModelIndex传递时,数据和角色,在本例中传递10,因为它是值编号Qt::CheckStateRole.

    TreeView {
        id: view
        model: fileSystemModel
        ...
    
        TableViewColumn {
            role: "checkRole"
            delegate: Component {
                CheckBox {
                    id: mycbx
                    checked: styleData.value
                    onCheckedChanged: view.model.setData(styleData.index, checked, 10)
                }
            }
        }
    ...
    

完整的示例可以在下面找到link https://github.com/eyllanesc/stackoverflow/tree/master/50178597-filesystembrowser.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向 QFileSystemModel 添加自定义角色 的相关文章

  • 为什么在排序输入上插入到树中比随机输入更快?

    现在我一直听说从随机选择的数据构建二叉搜索树比有序数据更快 这仅仅是因为有序数据需要显式重新平衡以将树高度保持在最低限度 最近我实现了一个不可变的treap http en wikipedia org wiki Treap 一种特殊的二叉搜
  • 为什么模板类的静态成员不唯一

    看一下下面的代码 include
  • 快速 log2(float x) 实现 C++

    我需要在 C 中非常快速地实现 log2 float x 函数 我发现了一个非常有趣的实现 而且速度非常快 include
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • 如何使用 libclang 判断成员函数是 const 还是 volatile?

    我有一个实例CXCursor同类CXCursor CXXMethod 我想知道这个函数是否是const or volatile 例如 class Foo public void bar const void baz volatile voi
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 如何从命名空间内重载运算符<<

    这是我能想到的最小的包含示例 首先是类的标题 每当使用 pragma once ifndef EURO H define EURO H include
  • 如何按名字和姓氏排序,然后按 SamAccountName 排序,其中并非所有姓名都有名字和姓氏?

    目前 我有以下内容 来自 LDAP Get context based on currently logged on user PrincipalContext domainContext new PrincipalContext Cont
  • 指向 VLA 的指针

    你可能知道 VLA 的优点和缺点 https stackoverflow com a 3082302 1606345在 C11 中它们是可选的 我认为使 VLA 成为可选的主要原因是 堆栈可能会爆炸 int arr n where n 10
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • 什么是 C++11 扩展 [-Wc++11-extensions]

    我需要一些帮助来了解此错误发生的位置 警告 非静态数据成员的类内初始化是 C 11 扩展 Wc 11 extensions 这是它来自的代码部分 typedef struct Hand bool straight false bool fl
  • C# XML 反序列化。将节点中的所有内部文本读取到字符串属性中

    我目前正在尝试修改我的类 以便我的模型上的文本属性包含某个节点的所有内部文本 text node 给我带来问题的 xml 示例是
  • 智能感知不显示评论

    如果我在 Visual Studio 2010 中输入类似的内容数据集1 我得到所有可用方法和属性的列表 智能感知 这很好用 但是 如果我在此列表中选择一个方法或属性 我不会得到 if 的描述 例如 如果我有类似的东西 public cla
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F
  • 使用 List.Contains 方法为 LINQ 构建表达式树

    Problem 我正在重构一些LINQ查询我们的 Web 应用程序中的多个报告 并且我尝试将一些重复的查询谓词移至它们自己的中IQueryable扩展方法 以便我们可以将它们重新用于这些报告以及将来的报告 正如您可能推断的那样 我已经重构了

随机推荐

  • 如何在React Native中重置Firebase身份验证密码

    我想知道如何在我的react native项目中重置firebase电子邮件身份验证密码的密码 我想发送一封电子邮件来重置密码 如何使用以下方法做到这一点 firebase auth sendPasswordResetEmail forgo
  • 从php访问json数据

    我在访问 JSON 数据时遇到问题 我对 JSON 和 jquery 很陌生 所以可能有一个简单的解决方案 我很高兴找到答案 我的 jQuery post currentPage php currentPage 1 function dat
  • 如何将第 3 方库添加到 Android AOSP 构建中?

    我正在尝试将 Jackson JSON 库添加到我的 AOSP 项目中 我可以编译我的项目并将其刷新到手机 但出现运行时错误 E JavaBinder 1689 java lang NoClassDefFoundError Failed r
  • 如何查看 ASP.Net MVC 中调用的每个控制器和操作方法?

    我一直致力于其他人用 ASP Net MVC 开发的许多项目 很多时候 我想在调试某些内容时查看页面加载期间调用了哪些控制器和操作 通常我会在控制器中设置一个断点 然后从那里转到视图以查看它是否包含任何 RenderAction Rende
  • fluidvalidation 更改 int/long 的默认错误消息

    有没有办法更改 FluentValidation 中的默认错误消息 我们能够为更复杂的类型设置验证 但简单的 您输入的数据不是整数 样式的东西我们似乎无法理解 这些的内置错误是 值 x 对 y 无效 或类似的内容 有没有办法覆盖这些 没有简
  • 使用 Internet Explorer 与 Chrome 和 Firefox 进行跨域 HTTP

    我正在我的 Web 应用程序和服务器之间发出 CORS 请求 该请求是一个简单的授权请求 请求发送后 服务器设置一个 JSESSIONID cookie 弹出一个对话框 输入您的用户名和密码 然后按提交 一旦凭据正确 httpRequest
  • 推荐的在线片段管理器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个在线片段管理器 用于工作 个人使用和灵感 我的主要需求是谷歌 脸书登录 各种编程语言的字体
  • CKFetchRecordsOperation + CKQueryOperations ...我错过了什么?

    经过大量搜索示例代码后 设法拼凑出 CKFetchRecordsOperation 就在这里 但我一定错过了什么 别误会我的意思 它确实是一种享受 但是 要执行 CKFetchRecordsOperation 您需要一个 CKRecordI
  • 如何获取类中函数的返回类型?

    例如 class A int foo return 1 void goo decltype A nullptr gt foo i The decltype A nullptr gt foo 在这里不起作用 因为 A 是不完整的类 怎么做 关
  • bluez 同时具有经典和低能耗设备

    Linux下的bluez是否可以同时连接多个经典和低能耗设备 bluez 网站提供这样的信息不是很有帮助 是的 我已经成功同时连接到 7 个低能耗设备 最大值因您使用的硬件而异 您还可以连接到多个经典设备 以下是我用于通过 L2CAP 连接
  • 在 django 中扩展表单?

    我最近尝试使用以下内容扩展 django 的注册表单 但我只能看到默认的四个字段 我有什么遗漏的吗 或者 如果我要创建自定义表单 我应该创建自己的注册后端吗 class RegistrationForm forms Form usernam
  • 将 javascript 日期解析为 golang 日期

    我需要解析通过调用获得的 JavaScript 格式的日期new Date 看起来像Sat Aug 27 2016 17 07 43 GMT 1000 AEST 然后我将其作为字符串发布到我的 golang 服务器 我需要解析它以使其格式与
  • 将 PIL 图像转换为字节数组?

    我有一个 PIL 图像格式的图像 我需要将其转换为字节数组 img Image open fh mode r roiImg img crop box 现在我需要roiImg作为字节数组 感谢大家的帮助 终于解决了 import io fro
  • 无法建立新连接:[Errno 111] 连接被拒绝

    我正在尝试从路透社获取数据并获取如下代码 但我认为由于不断的请求 我无法抓取更多数据 有办法解决这个问题吗 我正在使用谷歌Colab 虽然类似的问题还有很多 但都没有答案 如果我能得到一些帮助 我将非常感激 谢谢 pip install s
  • 递归更改 JSON 键名称(全部大写)?

    有没有办法将所有 JSON 键名称更改为大写字母 eg name john Age 21 sex male place state ca 并需要转换为 NAME john AGE 21 SEX male PLACE STATE ca 从你的
  • 确定哪些行导致查询错误

    我有一个包含 15 000 行的 Oracle 18c 表 作为测试 我尝试对其运行以下查询 select works for all rows sdo util to wkbgeometry sdo geometry replace sd
  • postgres 外键是否意味着索引?

    我有一个 postgres 表 我们称这个表为Events 与另一个表的复合外键 让我们调用这个表Logs 事件表如下所示 CREATE TABLE Events ColPrimary UUID ColA VARCHAR 50 ColB V
  • 生成详细输出的良好做法是什么?

    生成详细输出的良好做法是什么 目前 我有一个功能 bool verbose int setVerbose bool v errormsg verbose v if verbose v return 0 else return 1 每当我想生
  • 灵活地移动现有领域/行为[重复]

    这个问题在这里已经有答案了 如何将现有字段 IDublinCore rights 移动到特定字段之后的另一个字段集中 无需编写我自己的行为 IDublinCore 的副本 Rights 字段应出现在 image caption 自己的内容类
  • 如何向 QFileSystemModel 添加自定义角色

    我想向 QFileSystemModel 添加自定义角色 可能是派生模型 我想使用此角色来保存复选框的选中状态 该状态显示在自定义委托中的文件名旁边 如何才能做到这一点 我已经使用过使用示例Qt Quick Controls 文件系统浏览器