QListView 的 QStyledItemDelegate / QAbstractItemDelegate
QStyledItemDelegate / QAbstractItemDelegate for QListView
我的目标是创建类似联系人应用程序的东西,我可以在其中列出联系人并选择它来查看有关人员的信息。我发现一种可能的解决方案是使用 QListView + QStyledItemDelegate / QAbstractItemDelegate。资料太难看不懂了;
那么QAbstractItemDelegate应该怎么用(听说要重新实现paintEvent)?
我建议你从数据模型开始。
- 使用
QStandardItemModel
class 作为开始并用 QStandardItem
class 实例填充它。它将允许您为项目设置图标、文本、字体、背景、大小和其他属性。参考https://doc.qt.io/qt-5/qstandarditemmodel.html#details
- 使用
setModel
将模型设置为 QListView
- 要处理点击的项目,请连接到
QListView
的 clicked
信号。
要以更复杂的方式呈现项目,您应该
- 重写
QStyledItemDelegate
class 并且它是 paint
和 sizeHint
方法。在 paint
方法中,您应该实现渲染,并且您的 sizeHint
方法应该 return 项目的有效尺寸。参考https://doc.qt.io/qt-5/qabstractitemdelegate.html#details
- 要获取要呈现的项目数据,请使用传递给
paint
方法的 QModelIndex
引用的 data
方法。使用不同的角色来获取适当的数据。参考https://doc.qt.io/qt-5/qt.html#ItemDataRole-enum
- 通过
setItemDelegate
将其设置为 QListView
来使用您的代表 class。
模型应设置为 QListView,项目点击的处理方式相同。
我的目标是创建类似联系人应用程序的东西,我可以在其中列出联系人并选择它来查看有关人员的信息。我发现一种可能的解决方案是使用 QListView + QStyledItemDelegate / QAbstractItemDelegate。资料太难看不懂了;
那么QAbstractItemDelegate应该怎么用(听说要重新实现paintEvent)?
我建议你从数据模型开始。
- 使用
QStandardItemModel
class 作为开始并用QStandardItem
class 实例填充它。它将允许您为项目设置图标、文本、字体、背景、大小和其他属性。参考https://doc.qt.io/qt-5/qstandarditemmodel.html#details - 使用
setModel
将模型设置为 - 要处理点击的项目,请连接到
QListView
的clicked
信号。
QListView
要以更复杂的方式呈现项目,您应该
- 重写
QStyledItemDelegate
class 并且它是paint
和sizeHint
方法。在paint
方法中,您应该实现渲染,并且您的sizeHint
方法应该 return 项目的有效尺寸。参考https://doc.qt.io/qt-5/qabstractitemdelegate.html#details - 要获取要呈现的项目数据,请使用传递给
paint
方法的QModelIndex
引用的data
方法。使用不同的角色来获取适当的数据。参考https://doc.qt.io/qt-5/qt.html#ItemDataRole-enum - 通过
setItemDelegate
将其设置为QListView
来使用您的代表 class。
模型应设置为 QListView,项目点击的处理方式相同。