采用 takeItem 的最终实现。
1, 遍历行中的每一个元素, 用 takeItem取出, 并存储
2, 删除行(removeRow)
3, 在期望的位置插入新行(insertRow)
4, 遍历由takeItem取出并存储的item, 填充到正确位置(setItem)
补充说明:
item() 函数无法取代 takeItem()函数。因Q*WidgetItem的"所有权"(帮助里是这么翻译的)在setItem到Table的时候,已经有Table全权管理。那么,在执行removeRow步骤时,Q*WidgetItem会被销毁,那么步骤1中存储的指针就指向了脏数据区。导致之后在其上的操作崩溃。
不过,【交换一行 】功能挺常用的吧,没有内置到Qt里么?我确实是没找到。