带QItemDelegate的QListWidget或QListView?

Mah*_*san 19 qt qlistwidget qlistview qitemdelegate

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

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

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

对不起这篇巨大的帖子.我对何时使用QListWidget/QListView的整个概念感到困惑.

Mat*_*ips 16

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

使用QListWidget及其相关类,QListWidgetItem您可以非常容易地插入和移除项目.但是如果你正在插入QPushButtons,那么就不能使用它,所以你也可以使用QListView它的(继承的)方法为给定的索引设置小部件.

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

QObject::connect(my_button, SIGNAL(clicked()),...) 
Run Code Online (Sandbox Code Playgroud)

处理这个问题.

  • 显然你可以在`QListWidgetItem`上使用自定义小部件.请参阅此主题:http://qt-project.org/forums/viewthread/17953 (3认同)

myd*_*rms 7

与Matt的答案不同,似乎你可以使用自己的小部件QListWidgetItem,如qt-project.org上的这篇文章所述:http://qt-project.org/forums/viewthread/17953 .

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