如何在按列排序后从QTableWidget :: item获取正确的行(Qt BUG?)?

时间:2012-11-02 15:52:54

标签: c++ qt row qtablewidgetitem

我在Qt C++做了一些表格,今天我设置sortEnabled(true)后发现了一些非常可疑的东西。我想按列对QTableWidget进行排序,这就是我将该属性设置为true的原因。从逻辑上讲,我得到了我想要的东西,但我注意到当double click row of a table上有一个对应于其他行的模态对话框正在打开时。 我把那张表QTableWidgetItem-s放进去了。

 QTableWidgetItem* widgetItem = new QTableWidgetItem();
 widgetItem->setData(Qt::UserRole, it->id);

double click signal我正在使用QTableWidget::item(int aRow, int aCol)提取行项目,然后我将获得自定义唯一ID(在每行我分配了唯一ID)。

重点是:点击列标题后排序我得到排序前该位置的行ID。我现在拥有的ID对应于其他行,因为我已按其他列排序。

我如何摆脱这个问题?我做错什么了吗。或者我忘记将某些属性设置为true / false?

我认为sort仅影响表格的视觉方面,但不会影响结构方式......

我只想要正确的ID,没有别的。

以下是表格情况的简短示例:

排序前:

===id=======category==
|   47   |     b     |
|   48   |     a     |
|   49   |     c     |
|   50   |     d     |
======================

双击b项目(1,1)时,会返回correct QTableWidget*ID = 47

现在我点击catetegory标题进行排序

排序后:

===id=======category==
|   48   |     a     |
|   47   |     b     |
|   49   |     c     |
|   50   |     d     |
======================

双击a项目(1,1)时,会返回the old one QTableWidget*ID = 47 重新我想得到48而不是47 ..

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我不知道为什么它没有为您提供正确的项目,但您应该只听QTableWidget::itemDoubleClicked()信号,该信号会向您发送实际项目,因此您无需四处寻找它。