
QTreeView使用总结
文章平均质量分 66
把我在Qt开发过程中,关于使用QTreeView的知识与技巧作一个总结,分享给大家。
逆枫゛
武汉科技大学计算机系毕业,曾就职于国内一线的虚拟现实和信息安全公司,10余年C++/Qt开发经验。2017年辞职,与朋友合伙创办了一家新能源公司,一年后获得行业龙头投资,目前快速发展中。
展开
-
QTreeView使用总结--序
在Qt开发过程中,我发现树控件即QTreeView使用的非常频繁。各种批量展示和编辑信息的地方,都用得上该控件。我的项目在使用QTreeView过程中,用到了各种常规、不常规的功能,并进行过各种改造。这里将这些知识与技巧作一个总结,分享给大家。原创 2018-03-25 16:36:15 · 22735 阅读 · 11 评论 -
QTreeView使用总结1,一个简单示例
1,简介本文为一个最简单的QTreeView初始化过程的示例。除去了一切操作响应等细节,只是展示使QTreeView显示出带层次结构的数据,至少需要哪些代码。只附带了一点点常用设置项。2,效果3,代码一个QTreeView插入三层数据的最简单代码示例:void MainWindow::InitTree(){ //1,构造Model,这里示例具有3层关系的model构造过程 QSt...原创 2018-03-25 17:38:43 · 36717 阅读 · 4 评论 -
QTreeView使用总结2,常用API介绍
1,简介上一篇展示了一个最简单的QTreeView示例,只是刚刚能显示数据而已。实际使用中,需要对QTreeView的各项属性进行配置,下面介绍一下常用设置项。先看最终效果:2,QTreeView常用设置项void MainWindow::InitTree(){ //1,QTreeView常用设置项 QTreeView* t = ui->treeView; t-&g...原创 2018-03-25 18:45:42 · 9470 阅读 · 3 评论 -
QTreeView使用总结3,表头、行列相关的设置方法
1,简介上一篇文章介绍了QTreeView常用的设置API,一般情况足够使用了。以后逐步介绍更多的其他设置方法,本篇对表头、行、列相关内容做一个综合。2,表头、列QTreeView* t;隐藏表头:t->header()->hide();设置默认列宽:t->header()->setDefaultSectionSize(100);设置表头默认文字对齐:t->head...原创 2018-04-08 00:31:35 · 23084 阅读 · 0 评论 -
QTreeView使用总结4,Model/View框架介绍
1,简介Model/View架构分为三部分:模型、视图和委托。主要目的是将数据的存储与显示分离。Model模型:对外提供标准接口存取数据,不关心数据如何显示。View视图:定义数据的显示方式,不关心数据如何组织存储。Delegate委托:在视图的基础上可以自定义特殊的显示和编辑效果。2,运行过程(原理)一般通过原始数据构造一个Model,只有Model与内存上...原创 2018-04-23 21:41:05 · 7711 阅读 · 0 评论 -
QTreeView使用总结5,选中信号处理
1,简介之前介绍了QTreeView的初始化和常用设置,现在数据已经显示出来了。那么QTreeView上如何处理选中、单击双击、右键菜单等操作呢?本文介绍选中信号的处理。2,选中相关信号QTreeView的选中内容由一个封装的QItemSelectionModel管理,通过QTreeView接口selectionModel()可以取得该Model指针。该Model存在这些信号:Q_SIGNALS:...原创 2018-04-25 00:53:58 · 17606 阅读 · 8 评论 -
QTreeView使用总结6,单击双击的信号与事件
1,简介上文介绍了选中信号的处理,本文继续介绍QTreeView的操作处理。单击、双击的信号槽的写法,以及重写鼠标操作事件的一般方法。2,单机双击信号响应在QTreeView的父类QAbstractItemView内,定义了这一类视图控件的常用信号:QAbstractItemView.h:Q_SIGNALS: void pressed(const QModelIndex &inde...原创 2018-04-25 01:36:18 · 21208 阅读 · 2 评论 -
QTreeView使用总结7,右键菜单
1,简介最开始我要做右键菜单时,理所当然的想到的是右键单击的信号,这样是可以的。后来发现原来Qt给QWidget提供了单独的菜单信号:void customContextMenuRequested(const QPoint &pos);不过需要先设置菜单策略,使用接口:setContextMenuPolicy(Qt::CustomContextMenu);2,菜单效果下面介绍一个示例,实现...原创 2018-04-30 16:23:12 · 12735 阅读 · 1 评论 -
QTreeView使用总结8,风格美化,使用qss样式表
1,简介本文介绍我在使用QTreeView过程中,常用的样式设置方法。 介绍内容是与我自己的项目界面风格相关,并不是完整的介绍所有样式。 关于QTreeView完整的样式设置,可以参考博主一去丶二三里的文章: Qt之QSS(QTreeView)2,常用样式设置默认的QTreeView是这样的: 一般改造样式,会处理这些项: 表头:背景色、文字色、边框、高度 控件整体:背...原创 2018-05-10 18:19:48 · 25249 阅读 · 8 评论 -
QTreeView使用总结9,使用委托,定制item输入效果
1,简介前面一些文章介绍了QTreeView的常规用法,接下来介绍一些高级的用法和改造技巧。 本文介绍delegate,即委托,对QTreeView的item进行改造,以实现特殊的输入方式。2,其他参考资料Qt官方提供的委托示例:SpinBoxDelegate (在QtCreator的欢迎里搜delegate,其中spin box delegate example)关于委托...原创 2018-05-17 17:57:06 · 12801 阅读 · 3 评论 -
QTreeView使用总结10,使用委托,定制item显示效果
1,简介上一篇介绍了使用委托改变item的输入方式的方法,也是通常使用委托做的事情。 本文介绍了另外一个功能,定制item显示效果。 可能相比控制输入,不那么常用,不过有时候有些定制显示效果,通过委托来绘制是比较容易实现的。2,效果我的项目里有一个做了很多定制和改造的tree,其中一项就是对选中的整行进行加边框,效果如下:最开始尝试用item的样式表的border实现,...原创 2018-05-17 18:20:10 · 6125 阅读 · 4 评论 -
QTreeView使用总结11,数据过滤,使用代理model,简单过滤
1,简介有时候需要对tree内的数据按一些条件进行过滤显示,比如按搜索条件过滤,这时候就用到了代理model。 通常使用Qt提供的 QSortFilterProxyModel 类,该类实现了常见的按行列过滤的方法。 也可以自己从基类继承,重写 filterAcceptsRow 和 filterAcceptsColumn 来实现过滤:virtual bool filterAcceptsR...原创 2018-05-20 17:11:27 · 11439 阅读 · 2 评论 -
QTreeView使用总结12,数据过滤,代理model,自定义过滤条件
1,简介前文介绍了使用官方提供的代理Model进行常规数据过滤的方法。 本文继承该model,自定义一种过滤的条件,按我们特殊的要求进行过滤。 过滤条件:给定一个行数范围,只显示该范围内的数据。2,效果3,思路写一个MyProxyModel,继承QSortFilterProxyModel 类,由于是对行进行过滤,修改 filterAcceptsRow 方法。 需要设入一个...原创 2018-05-20 17:51:35 · 4519 阅读 · 0 评论 -
QTreeView使用总结13,自定义model示例,大大优化性能和内存
前面简单介绍过Qt的模型/视图框架,提到了Qt预定义的几个model类型:QStringListModel:存储简单的字符串列表QStandardItemModel:可以用于树结构的存储,提供了层次数据QFileSystemModel:本地系统的文件和目录信息QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:存取数据库数据。原创 2018-05-25 20:21:35 · 24530 阅读 · 27 评论 -
QTreeView使用总结14,自定义model,控制对齐和颜色
前文介绍了使用自定义model的基本方法,重点强调了该方法带来的性能上的优点。其实自定义model还能更方便地对内容进行一些属性控制,比如前景色、背景色、对齐、文本内容、字体等等。主要就是在data函数内对各种role进行处理。具体哪些种类可以参考ItemDataRole类型。下面示例对文本对齐和内容颜色的控制。原创 2018-05-29 15:33:53 · 8113 阅读 · 1 评论 -
QTreeView使用总结15,自定义model,支持item可编辑
1,简介之前发布的两篇自定义model的文章,有小伙伴下载源码后发现元素不能编辑。确实是的,因为我自己都是用来展示数据,没做这个。这篇文章实现item编辑功能。2,效果但是由于我这个示例,真实数据只有名称、三门课成绩,后面的展示数据都是根据这些实时计算出来的。因此只有真实数据支持修改,而且修改后 其他推算型数据也会自动刷新。这点需要注意。3,代码主要需处理下面几个地方:1,QTreeView 也要设置编辑操作类型:ui->tre原创 2021-07-07 10:02:25 · 7962 阅读 · 2 评论 -
QTreeView使用总结16,定时刷新后,当前选中行的处理
1,简介在使用QTreeView展示数据的时候,有些数据是在动态变化的, 这时候也需要动态刷新界面,一般直接更新model即可。 但是存在一个问题:之前的选中状态会丢失。 本文讨论在更新数据时如何处理选中状态。2,两种情况情况一:更新数据后,需选中同样内容的行。 比如:之前有3行,每行内容为a/b/c,选中了第1行a。现在更新后有5行,x/y/a/b/c,更新后要求仍然选中...原创 2018-06-14 18:05:10 · 7045 阅读 · 1 评论 -
QTreeView使用总结17:改造QTreeView,实现点击空白处取消选中
1,简介Qt 自带的 Tree、Table控件在点击空白处时无法取消选中,有时候需要这种功能,只好自己DIY2,效果3,主要代码继承QTreeView 写了个MyTreeView,在UI设计器内提升。MyTreeView.h:#ifndef MYTREEVIEW_H#define MYTREEVIEW_H#include <QTreeView>#include <QMouseEvent>//改造...原创 2020-08-31 22:58:41 · 3671 阅读 · 1 评论 -
QTreeView使用总结18:点击空白处取消选中,简单方法
1,简介前文介绍了通过继承重写mousePressEvent 来实现点击空白处取消选中的方法,有个弊端就是需要继承,为这个简单功能让工程多了2个类文件,感觉不太爽。后来采用了一种更简单的方法,不需要继承即可实现。主要就是通过父窗口(如MainWindow)的eventFilter,进行点击过滤处理。2,代码在MainWindow构造函数 添加如下代码:MainWindow::MainWindow(QWidget *parent) : QMainWindow(pa..原创 2021-11-01 16:47:01 · 4200 阅读 · 4 评论 -
QTreeView使用总结19,添加、删除、清空功能示例
介绍通过给Tree(Table代码类似)添加、删除、清空内容的操作代码。示例使用本地文件进行添加数据。同时演示了通过文件选择对话框选择本地文件的方法,并且示范了如何保存上一次选择的路径。原创 2022-11-07 23:38:28 · 6946 阅读 · 3 评论