Qt - QStyledItemDelegate

什么是QStyledItemDelegate

在介绍之前我们看一下 view / model 的示意图,之中代理就是delegate ,从图中我们可以看到它有2个作用

1、显示

2、编辑

qt 官方介绍:

When displaying data from models in Qt item views, e.g., a QTableView, the individual items are drawn by a delegate. Also, when an item is edited, it provides an editor widget, which is placed on top of the item view while editing takes place. QStyledItemDelegate is the default delegate for all Qt item views, and is installed upon them when they are created.

The QStyledItemDelegate class is one of the Model/View Classes and is part of Qt's model/view framework. The delegate allows the display and editing of items to be developed independently from the model and view.

The data of items in models are assigned an ItemDataRole; each item can store a QVariant for each role. QStyledItemDelegate implements display and editing for the most common datatypes expected by users, including booleans, integers, and strings.

 

总结:

1.QStyledItemDelegate 是 view 的默认委托,单个Item由委托绘制

QtQTreeView是用于显示有层次结构的数据的控件,而QStyledItemDelegate是用于自定义QTreeView中每个单元格的外观和行为的类,QAbstractProxyModel和QSortFilterProxyModel是用于在显示数据之前对数据进行排序、过滤和修改的模型。 下面是一个简单的示例,演示如何使用这些类来显示和修改数据: ```cpp // 创建数据模型 QStandardItemModel* model = new QStandardItemModel(this); // 添加数据 QStandardItem* parentItem = model->invisibleRootItem(); for (int i = 0; i < 3; ++i) { QStandardItem* item = new QStandardItem(QString("Parent %0").arg(i)); for (int j = 0; j < 3; ++j) { QStandardItem* childItem = new QStandardItem(QString("Child %0").arg(j)); item->appendRow(childItem); } parentItem->appendRow(item); } // 创建代理模型 QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(model); // 创建树视图 QTreeView* treeView = new QTreeView(this); treeView->setModel(proxyModel); // 创建代理 QStyledItemDelegate* itemDelegate = new QStyledItemDelegate(this); treeView->setItemDelegate(itemDelegate); // 显示窗口 this->setCentralWidget(treeView); ``` 在上面的示例中,我们首先创建了一个QStandardItemModel,并向其添加了一些数据。然后,我们创建了一个QSortFilterProxyModel,将其设置为QTreeView的模型。接下来,我们创建了一个QStyledItemDelegate,并将其设置为QTreeView的代理。最后,我们将QTreeView显示在窗口中。 通过使用这些类,我们可以轻松地自定义QTreeView中每个单元格的外观和行为,以及对数据进行排序、过滤和修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值