【问题标题】:How to setModel for QListWidget如何为 QListWidget 设置模型
【发布时间】:2014-11-10 15:48:12
【问题描述】:

有没有办法为 QListWidget 设置模型?我收到了AttributeError: QListWidget.setModel is a private method

class Model(QtCore.QAbstractListModel):
    def __init__(self):
        QtCore.QAbstractListModel.__init__(self)
        self.items=[]
    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self.items)
    def flags(self,index):
        return QtCore.Qt.ItemIsEditable

view=QtGui.QListWidget()

viewModel=Model()
view.setModel(viewModel)

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    我不认为你可以为 QListWidget 设置模型。因为 QListWidget 有自己的模型。但是你可以使用 QListView 并且你可以将你自己的模型设置为 QListView

    【讨论】:

    • 很高兴知道!谢谢!
    【解决方案2】:

    我只是想完成@Achayan 的回答:如果您查看 Qt 的文档,您可以找到 a very good tutorial 准确解释两者之间的区别

    • 通过标准小部件实现
    • 通过模型/视图实现

    在第一种情况下,标准小部件拥有数据的一个版本,乍一看似乎更容易操作和管理,但可能会导致同步问题。事实上,如果 widget 本身(它是一个视图)拥有自己的数据版本,您必须确保该数据与数据库同步。更重要的是,如果您有 2 或 3 个其他 相同 模型的小部件(例如:表示同一实体的表格、列表和组合框),因此您有 四个数据的版本...

    如果您想要更解耦和更灵活的实现,则第二个更好:模型实际上是“简单”的视图,并且不拥有任何数据。他只是与模型交互,因此模型必须实现给定的接口 (QAbstractItemModel)。

    在您的情况下:QListWidget 是“标准小部件”,QListView 是模型/视图实现的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2021-04-09
      相关资源
      最近更新 更多