gpt4 book ai didi

qt - 奇怪的 QTableWidget 行为 - 排序后并非所有单元格都填充,然后重新填充

转载 作者:行者123 更新时间:2023-12-03 14:34:26 29 4
gpt4 key购买 nike

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

(我有一些其他 UI 元素来设置计算 myValues 中的值的属性)。如果我更改属性、重新计算并重新创建表,一切都会按预期进行。如果我通过单击其中一个标题对表格进行排序,它会正确排序。但是,如果此时(排序后)我再次单击我的按钮以重新计算值并重新创建表,则该表非常损坏。也就是说,许多单元格是空的,而不是空的单元格似乎没有任何特定的顺序。

通过添加手动调用
this->tableWidget->sortByColumn(0, Qt::AscendingOrder);

在我的 CreateTable 函数开始时,一切都按预期工作,但当然新创建的表按列 0 排序,而不是为最后一次排序选择的列。

有没有人知道为什么不调用 sortByColumn 会出错? (我试图做一个简单的例子,但我无法在演示程序中复制这个问题)。

谢谢,

大卫

最佳答案

我在 python 中遇到了类似的问题,如果在该列停止填充后选择了一个列标题来启用对单元格的排序。

我通过在行添加方法的开头设置 self.tableWidget.setSortingEnabled(False),然后在行添加方法的末尾将其设置回 self.tableWidget.setSortingEnabled(True) 来解决它。根据 riverbank computing这是官方推荐的解决此问题的方法。

QTableWidget.setItem (self, int row, int column, QTableWidgetItem item)

Note that if sorting is enabled (see sortingEnabled) and column is the current sort column, the row will be moved to the sorted position determined by item.

If you want to set several items of a particular row (say, by calling setItem() in a loop), you may want to turn off sorting before doing so, and turn it back on afterwards; this will allow you to use the same row argument for all items in the same row (i.e. setItem() will not move the row).

See also item() and takeItem().

关于qt - 奇怪的 QTableWidget 行为 - 排序后并非所有单元格都填充,然后重新填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960505/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com