当前位置:编程学习 > wap >>

请问model/view刷新显示的问题,多谢您。

请问我用了MODEL/VIEW来显示表格的数据,好多不同的表格还有数据,然后我增删改数据后,我是通过直接操作model的数据源来增加删除修改的,我想把这个操作能够反应到界面上去,我就用reset()来刷新显示,感觉好慢,请问有无好的方法来解决这个问题?我看了下,只要我改一个数据,那整个表都要刷新,就是说model类里面的QVariant data(const QModelIndex &index, int role) const;这个函数要执行好多次啊,行X列,再加上各种ROLE的次数。。。 
请问大大有好的方法能使之快些嘛,多谢您。  --------------------编程问答-------------------- 你好这个刷新好多次也没有问题,你看看实现源代码,就会发现刷新的只是可见部分,最多1000行,也就是说假设你的列是10列,也只有10000次,这个10000次相对现在的cpu也就ms级能解决的问题。 --------------------编程问答-------------------- QVariant data(const QModelIndex &index, int role) const数据读数应放到缓存,不要每次都到文件中去读数据来显示,这读1000次文件是相当耗时的

增删改最好不要在model里做,可以把它提到data里做,这样我觉得更好,data数据准备好了,再通知model,model再通知view显示,层次关系很合理,各司其职,多好啊。

你可以把reset()改为dataChanged()信号,增删改通过data来处理,这样data可以封装为一个线性表,在data的增删改函数里,txDataChanged()信号,然后通知model发送dataChanged()信号,这样就可以刷新界面了,

--------------------编程问答--------------------
引用 2 楼 LazyDreamHunter 的回复:
QVariant data(const QModelIndex &index, int role) const数据读数应放到缓存,不要每次都到文件中去读数据来显示,这读1000次文件是相当耗时的

增删改最好不要在model里做,可以把它提到data里做,这样我觉得更好,data数据准备好了,再通知model,model再通知view显示,层次关系很合理,各司其职,多好啊。

你可以把reset()改为dataChanged()信号,增删改通过data来处理,这样data可以封装为一个线性表,在data的增删改函数里,txDataChanged()信号,然后通知model发送dataChanged()信号,这样就可以刷新界面了,


你好,请问你说的在Data里面做是指在数据源里面做还是在model的那个data函数里面做? --------------------编程问答-------------------- 数据源里面做 --------------------编程问答-------------------- 恩,在数据源里面改了东西,怎么通知model刷新显示啊,不是还是要调用reset()函数吗?
引用 4 楼 LazyDreamHunter 的回复:
数据源里面做
--------------------编程问答-------------------- 在data源里定义一个信号,void txDataChange();

比如在你的deleteData()

{
    emit txDataChange();
}

在model里建立这个联系

connect(pData, SIGNAL(txDataChange()), this, SIGNAL(layoutChanged()));

其中layoutChanged是model的信号 

--------------------编程问答-------------------- 哇塞谢谢您,我过会试下,还有什么好的信号和槽,我才发现有这个信号。。。

引用 6 楼 LazyDreamHunter 的回复:
在data源里定义一个信号,void txDataChange();

比如在你的deleteData()

{
    emit txDataChange();
}

在model里建立这个联系

connect(pData, SIGNAL(txDataChange()), this, SIGNAL(layoutChanged()));

其中layoutChanged是model的信号 
--------------------编程问答-------------------- 只听说过 MVC,现在才知道有 MDVC,长见识了。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,