QListView/KListView 的 setSorting...
先前在使用 QListView/KListView 時,想要停止排序的動作,我的作法是:
KListView *list = new KListView( this );
list->addColumn( "Name " );
list->setSorting( -1 );
QListViewItem *i1 = new QListViewItem( list );
i1->setText( 0, "Vivian Xu" );
QListViewItem *i2 = new QListViewItem( list );
i2->setText( 0, "Cd Chen" );
不過,這樣跑出來的結果會是:
很明顯的,這樣作是不對的。因為 Cd Chen 竟然跑在 Vivian Xu 前面!! 這樣是多麼大逆不道阿~~
原本以為是 setSorting 這個 method 的問題,也嘗試過多種解決方法,但終究不得其解。今天找到 QT 的 mail listing archive,終於找到解決方法。
我一直以為 setSorting 是用來設定要以哪個欄位進行排序,如果 -1 則取消排序的工作;看過這篇文章後,才知道 setSorting 主要用來設定要以哪個欄位進行排序,如果 -1 則是不提供透過 QListView::header() 進行排序。
現在,我才知道,要關閉 QListView/KListView 排序功能,必須要透過 constructor 才行:
QListViewItem::QListViewItem ( QListView * parent, QListViewItem * after )
Constructs an empty list view item that is a child of parent and is after item after in the parent's list of children. Since parent is a QListView the item will be a top-level item.
所以,上面的程式碼略作修改為:
QListViewItem *i2 = new QListViewItem( list, i1 );
這樣跑出來的畫面變成這樣:
嘿嘿,不錯,今天有點收穫。
這篇內容的 Trackback 網址:
- cdchen 的 BLOG
- 如果想要發表回應,請先登入 或 註冊。