2011-05-14 24 views
14

假設我需要顯示項目列表。每個項目包含一個QPushButton圖像和一些文本。當用戶點擊按鈕時應該發生一些事情(即我需要獲取信號)。在Qt中實現這一點的正確方法是什麼?QListWidget或QListView與QItemDelegate?

經過一番閱讀,我明白,如果我使用QListWidget和QListWidgetItem,這可以實現。我可以根據我的需要爲每個QListWidgetItem創建子類,並將它們設置在列表小部件中。

但是,我也讀了一個更合適的方法(MOdel視圖方法)是使用QlistView和QItemDelegate。但是如果我使用QItemDelegate,看起來我只能繪製小部件。我怎樣才能得到按鈕事件?

對不起,這個巨大的職位。我對什麼時候使用QListWidget/QListView的概念感到困惑。

回答

13

QListWidget本質上是一個定製版本QListView,專爲列表窗口小部件的標準情況而設計,當您所做的只是將圖像或文本項目呈現在列表中,並且與底層模型的關係非常簡單。

With QListWidget and its associated class QListWidgetItem you can例如插入和刪除物品很容易。但是如果你插入QPushButtons,那麼你不能使用它,所以你可以使用QListView及其(繼承)方法來設置給定索引的小部件。

至於信號,因爲你可以創建QPushButton S,只需使用

QObject::connect(my_button, SIGNAL(clicked()),...) 

來面對這一切。

+0

感謝您的寶貴意見。我明白使用QListView是最輕量級和首選的方法。我只需要顯示一個5-6項目的清單。而且我需要每個單元格內的圖標和按鈕。我現在可能會使用QListWidget和setIndexWidget,因爲它似乎減少了開發時間。 – 2011-05-16 06:17:53

+0

@Mahadevan聽起來不錯,樂意幫忙! – 2011-05-16 16:39:09

+2

顯然你可以在'QListWidgetItem'上使用一個自定義小部件。看到這個線程:http://qt-project.org/forums/viewthread/17953 – mydoghasworms 2013-11-29 05:37:52

6

與Matt的回答不同,您似乎可以在QListWidgetItem上使用自己的小部件,如qt-project.org上此帖所指出的:http://qt-project.org/forums/viewthread/17953

如果您只有幾件物品需要顯示,並且對烹飪模型課程不感興趣,這可能很有用。

+0

鏈接幫了很多。謝謝! – 2014-05-15 12:38:08