【问题标题】:QListWidget or QListView with QItemDelegate?QListWidget 或 QListView 与 QItemDelegate?
【发布时间】:2011-08-25 13:49:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: qt qlistview qitemdelegate qlistwidget


    【解决方案1】:

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

    使用QListWidget 及其关联类QListWidgetItem,您可以例如非常容易地插入和移除物品。但是,如果您要插入QPushButtons,那么您就不能使用它,因此您不妨只使用QListView 及其(继承的)方法来为给定索引设置小部件。

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

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

    解决这个问题。

    【讨论】:

    • 感谢您的宝贵意见。我知道使用 QListView 是最轻量级和首选的方法。我只需要显示 5 - 6 个项目的列表。我需要每个单元格内的图标和按钮。我现在可能会选择 QListWidget 和 setIndexWidget,因为它似乎可以减少开发时间。
    • 显然您可以在QListWidgetItem 上使用自定义小部件。看到这个线程:qt-project.org/forums/viewthread/17953
    • "但是如果你插入 QPushButtons,那么你就不能使用这个" 这完全不正确。只要您在创建项目后正确连接所有插槽和信号,然后将其添加到您的 QListWidget,您就可以使用按钮和 QListWidgetItem 内没有的内容。如果您能够这样做,那么您做错了什么。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多