Cd Chen's Services

ba ba ba la~~

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" );

不過,這樣跑出來的結果會是:

Listview-Setsorting-Normal

很明顯的,這樣作是不對的。因為 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 );

這樣跑出來的畫面變成這樣:

Listview-Setsorting-Afteritem

嘿嘿,不錯,今天有點收穫。

這篇內容的 Trackback 網址:

http://www.cdchen.idv.tw/trackback/299