要在QTreeView及其子项中隐藏下箭头,可以自定义一个QStyledItemDelegate,并重写它的paint()函数来绘制自定义的图标。
以下是一个示例代码:
#include <QApplication>
#include <QStandardItemModel>
#include <QTreeView>
#include <QStyledItemDelegate>
#include <QPainter>
class CustomDelegate : public QStyledItemDelegate
{
public:
explicit CustomDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent) {}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
// 绘制自定义图标,这里使用空白矩形代替下箭头
QRect rect(option.rect.left(), option.rect.top(), 10, option.rect.height());
painter->fillRect(rect, Qt::white);
// 获取文本内容并绘制
QString text = index.data(Qt::DisplayRole).toString();
QStyleOptionViewItem opt = option;
opt.text = text;
drawDisplay(painter, opt, rect);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QStandardItemModel model;
QStandardItem *rootItem = model.invisibleRootItem();
for (int i = 0; i < 3; ++i) {
QStandardItem *item = new QStandardItem("Parent " + QString::number(i+1));
// 隐藏下箭头
item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator);
rootItem->appendRow(item);
for (int j = 0; j < 5; ++j) {
item->appendRow(new QStandardItem("Child " + QString::number(j+1)));
}
}
QTreeView treeView;
treeView.setModel(&model);
// 设置自定义的委托
treeView.setItemDelegate(new CustomDelegate(&treeView));
treeView.show();
return app.exec();
}
在这个示例中,我们首先创建一个CustomDelegate类继承自QStyledItemDelegate,并重写了paint()函数。在paint()函数中,我们使用自定义的方式绘制图标(这里使用一个空白矩形代替下箭头),并获取文本内容进行绘制。
然后,在主函数中,我们创建了一个QStandardItemModel,并将其作为QTreeView的数据源。通过调用setItemDelegate()函数,将自定义的委托设置给QTreeView来实现对每个项的绘制操作。同时,我们也调用setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator)来隐藏所有子项的下箭头。
运行该示例代码,你会看到QTreeView及其子项中都没有显示下箭头。
内容由零声教学AI助手提供,问题来源于学员提问