• 8510阅读
  • 8回复

怎样交换QTableWidget中的两行数据?[已解决] [复制链接]

上一主题 下一主题
离线liuxu_lx7
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-25
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-07-26) —
需求:已知2行的行号,交换2行中完整的数据

我试用setItem方法,失败。做法如下:分别取出2行中每一列的QTableWidgetItem, 再正确设置它们的setItem。失败,什么变化也没有

离线jdwx

只看该作者 1楼 发表于: 2011-07-25
回 楼主(liuxu_lx7) 的帖子
New两个新的试试。要自己delete原来的item
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线abcdlcq

只看该作者 2楼 发表于: 2011-07-25
takeItem( )也许你用得着
离线liuxu_lx7
只看该作者 3楼 发表于: 2011-07-26
回 2楼(abcdlcq) 的帖子
有道理~
离线liuxu_lx7
只看该作者 4楼 发表于: 2011-07-26
采用 takeItem 的最终实现。

1, 遍历行中的每一个元素, 用 takeItem取出, 并存储
2, 删除行(removeRow)
3, 在期望的位置插入新行(insertRow)
4, 遍历由takeItem取出并存储的item, 填充到正确位置(setItem)

补充说明:
item() 函数无法取代 takeItem()函数。因Q*WidgetItem的"所有权"(帮助里是这么翻译的)在setItem到Table的时候,已经有Table全权管理。那么,在执行removeRow步骤时,Q*WidgetItem会被销毁,那么步骤1中存储的指针就指向了脏数据区。导致之后在其上的操作崩溃。

不过,【交换一行 】功能挺常用的吧,没有内置到Qt里么?我确实是没找到。
离线liuxu_lx7
只看该作者 5楼 发表于: 2011-07-26
期待发现更标准化的做法。。
离线abcdlcq

只看该作者 6楼 发表于: 2011-07-27
两行同时takeItem(),然后同时在对方项setItem,是不是可以不用removeRow
离线liuxu_lx7
只看该作者 7楼 发表于: 2011-07-29
回 6楼(abcdlcq) 的帖子
哦,原来如此
离线weihua1984

只看该作者 8楼 发表于: 2011-07-29
与其删除,插入,倒不如记录两行的值,再分别赋值 的方便
快速回复
限100 字节
 
上一个 下一个