按列进行排序后,如何从qtablewidget :: item(qt bug?)中获取正确的行

How to get the correct row from QTableWidget::item after sortting by column (Qt BUG ?)?

本文关键字:bug qt 获取 item 排序 qtablewidget      更新时间:2023-10-16

我在Qt C++中做一些表格,今天我发现了sortEnabled(true)后发现一些非常可疑的东西。我想按列对QTableWidget进行排序,这就是为什么我将该属性设置为true的原因。从逻辑上讲,我已经有了我想要的东西,但是我注意到,当我在row of a tabledouble click时,与其他行相对应的模态对话框正在打开。我放在该表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

现在,我要单击Cattegory标题进行排序

排序后:

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

双击a时(1,1)返回the old one QTableWidget*ID = 47 再次我想获得48不是47 ..

任何人可以帮我吗?

我不知道为什么它没有获得正确的物品,但您应该收听QTableWidget::itemDoubleClicked()信号,该信号向您发送了实际物品,因此您不必四处走动即可获得它。