首页| 论坛| 消息

标题:QTableView实时刷新数据与选择某一行的UI矛盾
作者:stlcours
日期:2014-12-18 02:34
内容:

好不容易搞懂了Model-View,成功控制了QTableView和它的TableModel(继承自QAbstractTableModel,并做扩展),可以分别达到两个目的:
1. 用户选择QTableView的某一行,然后可以做一些相应的操作,就像播放音乐文件一样。
2. QTableView不断刷新数据

没想到又来了一个新的矛盾:就是实时刷新数据的时候,几乎每秒都要调用QAbstractTableModel的一个自定义函数:

void TableModel::refrushModel()
{
beginResetModel(); // model 内置函数,这句是最关键的
endResetModel();
}
这样才能做到实时刷新。
但是刷新时,用户根本无法选中某一行了。即使选中,也会被刷新后自动取消,导致不能根据选中项目做一些其它的多线程操作,这该如何是好?


#1 [stlcours 12-18 02:50]
我想了一个办法,就是只要点击了QTableView的某一项,就把它记录在m_selectitem里。然后每次刷新完毕以后,重新调用
m_tableview->selectRow(m_selectitem);

看上去这个方法可以,可是一旦执行,就会出错,而且执行四次,出错的QT库源代码位置都不一样(不是我的源代码位置),所以我想应该不是我的问题。
看来我这个笨办法还是不行,有没有别的办法,请各位多指教。
#2 [dbzhang800 12-18 09:05]
你的 void TableModel::refrushModel() 想法有问题吧?动不动就 reset Model?
#3 回 dbzhang800 的帖子 [stlcours 12-18 21:27]
dbzhang800:你的 void TableModel::refrushModel() 想法有问题吧?动不动就 reset Model?
 (2014-12-18 09:05) 
请教那应该怎么办?
#4 回 stlcours 的帖子 [dbzhang800 12-18 21:36]
stlcours:请教那应该怎么办? (2014-12-18 21:27) 
不知道你代码最终目的是什么啊。感觉上你想做的是对Model进行 追加/插入/删除 行等操作,而不是 reset Model.
#5 [stlcours 12-19 00:25]
我是想修改后刷新显示,请指教!

<< 1 2 3 >> (1/4)

回复 发表
主题 版块