奇怪的QTableWidget行为 - 并非排序后再填充所有单元格

Dav*_*ria 9 qt qt4

我有一个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().

  • 这个有效,我认为应该是这个问题的答案。使用 PyQt4 在 QTableWidget 上进行测试。 (2认同)
  • 5.12.2 中同样令人讨厌的行为:-( (2认同)