Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在按列排序后从QTableWidget::item获取正确的行(Qt BUG?)?_C++_Qt_Row_Qtablewidgetitem - Fatal编程技术网

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

C++ 如何在按列排序后从QTableWidget::item获取正确的行(Qt BUG?)?,c++,qt,row,qtablewidgetitem,C++,Qt,Row,Qtablewidgetitem,我在qtc++中做一些表格工作,今天我在设置sortEnabled(true)后发现了一些非常可疑的东西。我想按列对QTableWidget进行排序,这就是为什么我将该属性设置为true。从逻辑上讲,我已经得到了我想要的,但我注意到,当我在表的行上双击时,一个对应于其他行的模式对话框正在打开。 我将QTableWidgetItem-s放入该表中 QTableWidgetItem* widgetItem = new QTableWidgetItem(); widgetItem->setD

我在
qtc++
中做一些表格工作,今天我在设置
sortEnabled(true)
后发现了一些非常可疑的东西。我想按列对
QTableWidget
进行排序,这就是为什么我将该属性设置为
true
。从逻辑上讲,我已经得到了我想要的,但我注意到,当我在表的
行上双击
时,一个对应于其他行的模式对话框正在打开。
我将QTableWidgetItem-s放入该表中

 QTableWidgetItem* widgetItem = new QTableWidgetItem();
 widgetItem->setData(Qt::UserRole, it->id);
双击signal
上,我用
QTableWidget::item(intarow,intacol)
提取行项目,然后我得到自定义唯一ID(在我分配的每一行中都有唯一ID)

要点是:单击列标题并排序后,我将获得排序之前该位置上的行的ID。我现在得到的ID对应于另一行,因为我已按其他列排序

我怎样才能摆脱那个问题?我做错什么了吗。或者我忘记将某些属性设置为true/false

我认为,
sort
只会影响表的视觉方面,但不会以结构化的方式影响

我只想要正确的身份证,别的什么都不要

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

排序前:

===id=======category==
|   47   |     b     |
|   48   |     a     |
|   49   |     c     |
|   50   |     d     |
======================
当双击
b
项(1,1)时,返回
正确的QTableWidget*
ID=47

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

排序后:

===id=======category==
|   48   |     a     |
|   47   |     b     |
|   49   |     c     |
|   50   |     d     |
======================
当双击
a
项(1,1)时,再次返回
旧的QTableWidget*
ID=47
我想得到48而不是47..


有人能帮我吗?

我不知道为什么它不能给你正确的项目,但你应该只听发送给你实际项目的信号,这样你就不必到处去拿它了。

我实际上在听
void cell双击(int行,int列)
。我会试试你的建议,当我看到结果时,我会记下答案。谢谢:)顺便说一句。。你知道为什么我的方法(听
cellDoubleClicked
)不起作用吗?因为它将是伟大的,以最小的代码逻辑变化完成任务。。。如果没有其他方法,我将使用你建议我的重写方法。