我有一个QTableWidget,我填充如下:
// Clear the table
this->topPatchesTableWidget->setRowCount(0);
this->topPatchesTableWidget->setRowCount(numberToDisplay);
for(unsigned int pairId = 0; pairId < numberToDisplay; ++pairId)
{
// Display patch match scores
QTableWidgetItem* myLabel = new QTableWidgetItem;
myLabel->setData(Qt::DisplayRole, myValues[pairId]);
this->tableWidget->setItem(pairId, 0, myLabel);
... fill other columns ...
}
Run Code Online (Sandbox Code Playgroud)
(我有一些其他UI元素来设置计算myValues中值的属性).如果我更改属性,重新计算并重新创建表,一切都按预期工作.如果我通过单击其中一个标题对表进行排序,则会对其进行正确排序.但是,如果此时(排序后)我再次单击我的按钮重新计算值并重新创建表,表格非常破碎.也就是说,许多单元格是空的,而非空单元格似乎没有任何特定的顺序.
通过添加手动调用
this->tableWidget->sortByColumn(0, Qt::AscendingOrder);
Run Code Online (Sandbox Code Playgroud)
在我的CreateTable函数的开头,一切都按预期工作,但当然新创建的表按列0排序,而不是为最后一次排序选择的列.
有没有人知道为什么没有调用sortByColumn就会出错?(我试图做一个简单的例子,但我无法在演示程序中复制问题).
谢谢,
大卫
Kar*_*sov 19
我在python中遇到了类似的问题,如果选择了列标题以便在该列停止填充后启用对单元格的排序.
我通过在行add方法的开头设置self.tableWidget.setSortingEnabled(False),然后在行add方法的末尾将其设置回self.tableWidget.setSortingEnabled(True)来解决它.根据河岸计算,这是解决这个问题的官方推荐方法.
QTableWidget.setItem (self,int row,int column,QTableWidgetItem item)
请注意,如果启用了排序(请参阅sortingEnabled)并且列是当前排序列,则该行将移动到由item确定的排序位置.
如果要设置特定行的多个项目(例如,通过在循环中调用setItem()),您可能希望在执行此操作之前关闭排序,然后将其重新打开; 这将允许您对同一行中的所有项使用相同的行参数(即setItem()不会移动该行).
另请参见item()和takeItem().
| 归档时间: |
|
| 查看次数: |
5063 次 |
| 最近记录: |