2013-07-11 172 views
0

我有一個QTableWidget,第一列填充了可選項目,所以我需要重載這些項目才能對它們進行排序。排序按預期工作時,我點擊該列的標題(行排序 - 首先有檢查行,然後不檢查)。調用setSortingEnabled(1)時發生意外的行爲

,當我跑我的GUI,不上任何列的標題點擊排序表,然後做到這一點,會出現問題:

tableWidget.setSortingEnabled(0); 
// check/uncheck some checkable items here 
tableWidget.setSortingEnabled(1); 

在這種情況下覆蓋__lt__被稱爲100+次,但我不期望,因爲我沒有點擊該列的標題進行排序。那麼,爲什麼__lt__被調用?爲什麼它比較了一些可檢查的項目,即使我沒有點擊該列的標題來對它們進行排序?

請幫我,打電話__lt__當我有30多行時,會消耗太多的時間。

回答

5

從文檔(C++ QT而是適用):

sortingEnabled:布爾

這個屬性保存是否排序被啓用。

如果此屬性爲true,則爲表啓用排序。如果此 屬性爲false,則不啓用排序。默認值是false。

注意: 使用setSortingEnabled() 將屬性設置爲true,將立即觸發對sortByColumn()的調用,並使用當前的排序 部分和順序。

如果你檢查QHeaderView的文檔(這是由小部件查詢瞭解列進行排序),你可以閱讀:

INT QHeaderView :: sortIndicatorSection()const的

返回具有排序指示符的節的邏輯索引。通過 默認這是部分0

另請參見setSortIndicator(),sortIndicatorOrder()和 setSortIndicatorShown()。

和:

的Qt :: SortOrder的QHeaderView :: sortIndicatorOrder()const的

返回排序指標的順序。如果沒有章節有排序 指示器此函數的返回值是undefined

所以,你應該謹慎使用該

+0

謝謝您的回答。首先,我已經在'setSortingEnable(1)'之前和之後嘗試過'sortIndicatorSection()',兩個結果都是「7」。我有7列(0-6),所以我猜想,默認的排序部分不是0,但列表的表格(在我的情況下,第7節)儘管排序行爲像它是0.也許這是因爲我有tableWidget而不是tableView ? – Aleksandar

+1

無論如何,你的回答指向我正確的方向,我發現這個:void QHeaderView :: setSortIndicator(int logicalIndex,Qt :: SortOrder order)' - _「logicalIndex可能是-1,在這種情況下,沒有排序指示器被顯示,模型將返回到它自然的,未排序的順序。「_。 這也適用於tableWidget,在tableWidget填充之前放置該行解決了我的問題。 – Aleksandar

+0

QTableWidget繼承自QTableView。但在內部處理模型。奇怪的是7回來了。很高興幫助反正:) – Trompa

相關問題