一般情况下QListView中的元素可以用QStandardItem表示,但对与一些想要展示复杂内容的情况,QListView并不能向QListWidget一样直接调用setItemWidget实现,需要采用其他方法实现。
为QStandardItem修改QStyledItemDelegate实现自定义Item
QStyledItemDelegate类主要用于为 Model-View 中的数据项提供显示和编辑功能。其在绘制数据项时会调用paint进行渲染。因此可以通过重写paint函数就可以实现自定义数据。
首先自定义一个结构体并完成注册,之后就可以作为item数据
typedef struct {
QString iconPath;
QString title;
QString subTitle;
QString content;
QString time;
} MyItemData;
Q_DECLARE_METATYPE(MyItemData)
之后创建自己的ItemDelegate并继承自QStyledItemDelegate并重写其paint函数
#ifndef UI_WIDGETS_MY_LISTVIEW_ITEM_H_
#define UI_WIDGETS_MY_LISTVIEW_ITEM_H_
#include <QStyledItemDelegate>
class QPainter;
class QWidget;
class QItemDelgate;
class QListView;
namespace ui {
class MyItemDelegate : pub