QListView 的 QStyledItemDelegate / QAbstractItemDelegate

QStyledItemDelegate / QAbstractItemDelegate for QListView

我的目标是创建类似联系人应用程序的东西,我可以在其中列出联系人并选择它来查看有关人员的信息。我发现一种可能的解决方案是使用 QListView + QStyledItemDelegate / QAbstractItemDelegate。资料太难看不懂了;

(联系人应该类似于 https://www.sketchappsources.com/free-source/4395-ios-contacts-screen-app-sketch-freebie-resource.html

那么QAbstractItemDelegate应该怎么用(听说要重新实现paintEvent)?

我建议你从数据模型开始。

  1. 使用 QStandardItemModel class 作为开始并用 QStandardItem class 实例填充它。它将允许您为项目设置图标、文本、字体、背景、大小和其他属性。参考https://doc.qt.io/qt-5/qstandarditemmodel.html#details
  2. 使用 setModel
  3. 将模型设置为 QListView
  4. 要处理点击的项目,请连接到 QListViewclicked 信号。

要以更复杂的方式呈现项目,您应该

  1. 重写 QStyledItemDelegate class 并且它是 paintsizeHint 方法。在 paint 方法中,您应该实现渲染,并且您的 sizeHint 方法应该 return 项目的有效尺寸。参考https://doc.qt.io/qt-5/qabstractitemdelegate.html#details
  2. 要获取要呈现的项目数据,请使用传递给 paint 方法的 QModelIndex 引用的 data 方法。使用不同的角色来获取适当的数据。参考https://doc.qt.io/qt-5/qt.html#ItemDataRole-enum
  3. 通过 setItemDelegate 将其设置为 QListView 来使用您的代表 class。

模型应设置为 QListView,项目点击的处理方式相同。