一般情况下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 : public QStyledItemDelegate {

当QListView需要展示复杂内容时,不能直接使用setItemWidget。本文介绍如何通过继承QStyledItemDelegate,重写paint和sizeHint函数,实现自定义Item。首先定义一个结构体作为item数据,然后创建自定义ItemDelegate,调整paint函数以达到所需效果,并通过QListView处理点击事件,最终实现自定义的显示效果。
最低0.47元/天 解锁文章
953





