2012-11-02 54 views
0

我在Qt C++做了一些表格的東西,今天我在sortEnabled(true)後發現了一些非常可疑的東西。我想按列排序QTableWidget,這就是爲什麼我將該屬性設置爲true。按照邏輯,我有我想要的,但我注意到,當我double clickrow of a table對應於其他行的模式對話框正在打開。 我把這張表放在QTableWidgetItem-s如何在按列(Qt BUG?)排序後從QTableWidget :: item獲取正確的行?

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

double click signal我與QTableWidget::item(int aRow, int aCol)提取該行項目,然後我得到的定製唯一的ID(每行我分配唯一的ID)。

重點是:在點擊列標題和排序後,我得到排序前該位置上的行的ID。現在我得到的ID對應於其他行,因爲我已經按其他列排序。

我如何擺脫這個問題?我做錯什麼了嗎。或者我忘記將某些屬性設置爲真/假?

我在想,sort影響只是表的視覺方面,而不是結構性的方式...

我只想正確的ID,沒有別的。

這裏的表的情況很短的例子:

排序前:

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

b項目(1,1)雙擊返回correct QTableWidget*ID = 47

現在我'點擊菜單頭排序

排序:

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

a項目(1,1)雙擊返回the old one QTableWidget*ID = 47AGAIN我想得到48沒有47 ..

任何人都可以幫我嗎?

回答

1

我不知道爲什麼它沒有給你正確的項目,但你應該只聽QTableWidget::itemDoubleClicked()信號,它發送給你的實際項目,所以你不必去找到它。

+0

我實際上在聽'void cellDoubleClicked(int row,int column)'。我會嘗試你的建議,當我看到結果時,我會標記答案。謝謝:)順便說一句..你有什麼想法爲什麼用我的方法(聽'cellDoubleClicked')不起作用?因爲通過對代碼邏輯的最小改變來完成任務將非常棒......如果沒有其他方法 - 我將使用您建議我的重寫方法。 –