零、未改变图标大小
一、设置所有图标大小
ui->treeWidget->setIconSize(QSize(64, 64));
结果如下图所示。
二、自定义某一行的图标大小
使用委托的方法,由我们自己来绘画每一个item。需要子类化一个委托类。直接看代码。
//mydelegate.h
#ifndef MYDELEGATE_H
#define MYDELEGATE_H
#include <QWidget>
#include <QStyledItemDelegate>
class MyDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit MyDelegate(QWidget *parent = nullptr);
void paint(QPainter *painter,
const QStyleOptionViewItem &option, const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
};
#endif // MYDELEGATE_H
//mydelegate.cpp
#include "mydelegate.h"
#include <QPainter>
#include <QApplication>
MyDelegate::MyDelegate(QWidget *parent) : QStyledItemDelegate(parent)
{
}
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
/* mouze 这里我们的需求是将根节点的图标放大,子节点的图标也放大但比根节点小。参考QStyledItemDelegate类的paint函数 */
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
if (!index.parent().isValid())//一级节点
{
opt.decorationSize = QSize(36, 36);//设置图标大小 根据需求修改数值
}
else
{
opt.decorationSize = QSize(24, 24);
}
const QWidget *widget = NULL;
widget = option.widget;
QStyle *style = widget ? widget->style() : QApplication::style();
style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget);
}
QSize MyDelegate::sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
//mouze 根据需求修改数值
if (!index.parent().isValid())//一级节点
{
return QSize(24, 24);
}
else
{
return QSize(18, 18);
}
return QStyledItemDelegate::sizeHint(option, index);
}
子类化委托类后,给树控件设置委托。
ui->treeWidget->setItemDelegate(new MyDelegate); //设置委托
结果如下图所示。