• 12467阅读
  • 7回复

[提问][求助][已经解决]QTableWidget 排序导致的奇怪问题 [复制链接]

上一主题 下一主题
离线welback
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-01
遇到一个很奇怪的问题
我的界面里有一个QTableWidget 控件
QTableWidget 是自带按照内容text排序的功能的。
我有一个list,是隔一段时间自动更新,而且也会把内容写到QTableWidgetitem里面
例如:
newItem=newQTableWidgetItem(QString::fromUtf8("否"));
[pre]tw->setItem(row,2,newItem);[/pre][pre] [/pre][pre]如果不点击排序,则刷新非常正常。[/pre][pre] [/pre][pre]但是,当我点击了按照第N列排序之后。再次刷新的时候,从N+1列开始的内容全都不显示了。[/pre][pre] [/pre][pre]可以看两个图片,分别是点击排序之前和之后的,排序的方式是点击表头自动排序。[/pre][pre]可以看到我点了按照某一列排序,则后面的内容都不见了。[/pre][pre] [/pre][pre]求教这是什么问题呢?因为不涉及我自己的排序算法,所以难道是QTableWidget 排序的bug?。。。[/pre]
[ 此帖被welback在2011-04-01 13:49重新编辑 ]
离线welback
只看该作者 1楼 发表于: 2011-04-01
补充一下:我发现 在横排上,list中的第一项之下的内容都可以正确显示。
例如下面这个图片,linksys是我自己的list的第一项,它下面的内容就可以正确显示。
我按照第一列排序,结果linksys下面的一项显示就正常,但是它上面的所有项内容都缺失了。
不明白了。每一个item的newItem=newQTableWidgetItem(QString::fromUtf8("否"));
类似这样的语句确实都执行了的。
[ 此帖被welback在2011-04-01 12:06重新编辑 ]
离线welback
只看该作者 2楼 发表于: 2011-04-01
继续补充,比如我点击了第2列排序,则刷新后第3列开始的内容没了,我再点按第4列排序,则前面的内容再刷新之后又会显示。。。。
离线welback
只看该作者 3楼 发表于: 2011-04-01
问题解决了,是因为用循环设置 row内容比较容易引起 sorting的混乱。

在循环之前
tw->setSortingEnabled(false);  先禁止排序

再循环之后再
tw->setSortingEnabled(true); 回复排序

就可以解决这个问题了。
离线uidab

只看该作者 4楼 发表于: 2011-04-01
引用第3楼welback于2011-04-01 13:48发表的  :
问题解决了,是因为用循环设置 row内容比较容易引起 sorting的混乱。
在循环之前
tw->setSortingEnabled(false);  先禁止排序
.......




如果排序后再加入新的东西呢?会不会还有影响?

有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线downstairs

只看该作者 5楼 发表于: 2011-04-01
.....。。逻辑混乱
喜爱编程的猫头鹰
离线wxyao

只看该作者 6楼 发表于: 2011-04-13
我也遇到了,之前用model+view就没关系,随便怎么点击排序。
[ 此帖被wxyao在2011-04-13 18:02重新编辑 ]
离线sunjie0613
只看该作者 7楼 发表于: 2011-09-05
这个是很恶心,即使先禁掉排序,插入后再打开还是会有问题。 所以最好还是自己去重载排序算法。
快速回复
限100 字节
 
上一个 下一个