23

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

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

但是,我还读到更合适的方法(模型视图方法)是使用 QlistView 和 QItemDelegate。但是如果我使用 QItemDelegate,我似乎只能绘制小部件。如何获取按钮事件?

对不起这个巨大的职位。我对何时使用 QListWidget / QListView 的整个概念感到困惑。

4

2 回答 2

18

QListWidget本质上是 的定制版本QListView,专为列表小部件的标准情况而设计,此时您所做的只是在列表中呈现图像或文本项,并且与底层模型的关系很简单。

使用QListWidget及其关联的类QListWidgetItem,您可以非常轻松地插入和删除项目。但是如果你正在插入QPushButtons,那么你就不能使用它,所以你最好只使用QListView它的(继承的)方法来为给定的索引设置小部件。

至于信号,因为您将创建QPushButtons,只需使用

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

处理那个。

于 2011-05-15T00:31:43.553 回答
7

与马特的回答不同,您似乎可以在 a 上使用自己的小部件QListWidgetItem,正如 qt-project.org 上的这篇文章中指出的那样:http: //qt-project.org/forums/viewthread/17953

如果您只有几个项目要显示并且对制作模型类的麻烦不感兴趣,这可能会很有用。

于 2013-11-29T05:37:24.597 回答