带QItemDelegate的QListWidget或QListView?

时间:2011-05-14 16:15:28

标签: qt qlistview qitemdelegate qlistwidget

假设我需要显示一个项目列表。每个项目都包含一个QPushButton图像和一些文本。当用户点击按钮时会发生某些事情(即我需要获取信号)。在Qt中实现这个的正确方法是什么?

经过一些阅读,我明白如果我使用QListWidget和QListWidgetItem,这可以实现。我可以根据我的需要对每个QListWidgetItem进行子类化,并将它们设置在列表小部件中。

然而,我还读到一个更合适的方法(MOdel View方法)是使用QlistView和QItemDelegate。但如果我使用QItemDelegate,似乎我只能绘制小部件。如何获得按钮事件?

对于这篇巨大的帖子感到抱歉。我对何时使用QListWidget / QListView的整个概念感到困惑。

2 个答案:

答案 0 :(得分:15)

QListWidget本质上是QListView的自定义版本,专为列表小部件的标准情况而设计,当您所做的只是在列表中显示图像或文本项以及与底层的关系时模型很简单。

使用QListWidget及其关联的课程QListWidgetItem,您可以很容易插入和删除项目。但是如果你要插入QPushButtons,那么就不能使用它,所以你也可以使用QListView及其(继承)方法为给定索引设置小部件。

至于信号,因为你将创建QPushButton,所以只需使用

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

处理那个。

答案 1 :(得分:6)

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

如果您只展示一些项目并且对烹饪模型类的麻烦不感兴趣,这可能会很有用。