有的时候我们QTreeView的里面数据已经改变,但是界面却还是显示原来的数据,有的人会说用update函数,但是这个函数没啥用,
经过半天的摸索,发现了这三种方法。
第一种:使用QTreeView的
doItemsLayout()
但是这个函数最好是在主线程中调用,因为这个函数里面是哟你定时器,在非主线程中调用会报警告。
第二种:使用模型/视图框架,继承QAbstractItemModel,然后就可以使用下面两个函数来刷新。
beginResetModel();
endResetModel();
第三种:下面这个方法是最好的
QAbstractItemView::viewport()->update();
有的时候我们QTreeView的里面数据已经改变,但是界面却还是显示原来的数据,有的人会说用update函数,但是这个函数没啥用,经过半天的摸索,发现了这两种方法。第一种:使用QTreeView的doItemsLayout()但是这个函数最好是在主线程中调用,因为这个函数里面是哟你定时器,在非主线程中调用会报警告。第二种:使用模型/视图框架,继承QAbstractItemModel...
背景:最近用到了
treeView
控件,来显示指定文件夹里的所有文件,文件因为有更新,因此实现了一个右键菜单点击
刷新
列表的功能。
本来以为这个功能很简单,只需要把原来的
treeview
或者model删除了,重新加载一次就好了,也看到有网友提供这样类似的方法,但是自己尝试了多次都没有实现,清空model->clear()后,程序直接崩溃,貌似原因是这样做了model将不能再次被使用。。。在网上看了很多资料,都没有找到一种合适的解决办法。
解决办法:最终自己只能用笨方法解决了。思路:遍历文件夹中的文件与tr
最近开发redis可视化ui,连到了阿里云上的redis,这个redis的hash动辄好几百条
数据
,拿到后写到
QT
ableview中。测试良好。
但测试一段时间后,点了几十条hash,拿到了几十条hash
数据
,
QT
ableview也更新了几十次,在进行其他操作的时候,出现了程序崩溃。
于是就想,是不是发生了内存泄漏。
假设有一个
QT
ableview,名叫table
先看下面的代码,功能是清空TableView
void clear
TreeView
(){
ui->view->setM
QTreeView
处理大量
数据
(使用1000万条
数据
,每次都只是部分
刷新
)
如何使
QTreeView
快速显示1000万条
数据
,并且内存占用量少呢?这个问题困扰我很久,在网上找了好多相关资料,都没有找到合理的解决方案,今天在这里把我的解决方案提供给朋友们,供大家相互学习。
我开始使用的
QT
reeWidget 控件来显示我的
数据
,发现该控件在显示10000行以下的
数据
还可以应付的过来,但超过100...
对于一些
数据
量小的列表我们使用QListWidget往往能满足开发的需求,但是对于大
数据
量的展示来说(几十万,上百万)来说的话,全部加载是一个不是很合适的方法。因此我们使用MVC,这里可能应该叫MVD(model,view,delegation)。这样做个人认为有两个好处:
1.效率问题,view和delegation配合只负责从model中取显示需要的
数据
,因此带来高效。
2.model的
数据
可以由不同view来显示。
这里的话封装下通用QListView的通用方法(Tree和Table之后做),去
移植同事的代码,其中有一个功能给
TreeView
添加节点,主节点添加后不显示,子节点就没有问题,原来是少了行代码。
TreeView
.Items.Add(nil, 'NewItem');
TreeView
.Refresh;
TreeView
第一次用,经验太少了,顺便记录下添加子节点的代码:
procedure AddTreeNode(
TreeView
: T
TreeView
; const
在
Qt
开发过程中,我发现树控件即
QTreeView
使用的非常频繁。
各种批量展示和编辑信息的地方,都用得上该控件。
我的项目在使用
QTreeView
过程中,用到了各种常规、不常规的功能,并进行过各种改造。
这里将这些知识与技巧作一个总结,分享给大家。
QTreeView
是一个基于模型的视图,用于显示层次结构的
数据
。当需要对树形结构中的元素进行操作时,通常需要使用右键菜单。
QTreeView
中的右键菜单可以通过QMenu类进行创建。具体步骤如下:
1. 创建QMenu对象,例如menu = QMenu(self)。
2. 为菜单添加需要的动作,例如action1 = QAction('动作1', self)。
3. 将动作添加到菜单中,例如menu.addAction(action1)。
4. 将菜单设置为
QTreeView
内置的右键菜单,例如
treeView
.setContextMenuPolicy(
Qt
.CustomContextMenu)。
treeView
.customContextMenuRequested.connect(self.showContextMenu)。
5. 在右键单击事件中,获取鼠标点击的位置并弹出菜单,例如:
def showContextMenu(self, pos):
globalPos = self.
treeView
.mapToGlobal(pos)
self.menu.exec(globalPos)
在这个过程中,需要注意的是,
QTreeView
需要先设置ContextMenuPolicy属性为
Qt
.CustomContextMenu才能使用右键菜单,同时右键单击事件也需要通过connect()函数进行绑定。创建菜单的过程与使用QMenu对象的方法是类似的,通过addAction()方法向菜单中添加动作,通过执行菜单的exec()方法即可弹出菜单。