QTreeView QTreeWidget改变图标大小

零、未改变图标大小

QTreeView QTreeWidget改变图标大小_第1张图片

一、设置所有图标大小

ui->treeWidget->setIconSize(QSize(64, 64));

结果如下图所示。

QTreeView QTreeWidget改变图标大小_第2张图片

 二、自定义某一行的图标大小

使用委托的方法,由我们自己来绘画每一个item。需要子类化一个委托类。直接看代码。

//mydelegate.h

#ifndef MYDELEGATE_H
#define MYDELEGATE_H

#include 
#include 

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 
#include 

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); //设置委托

结果如下图所示。

QTreeView QTreeWidget改变图标大小_第3张图片

本文链接:https://blog.csdn.net/dhvdhd/article/details/119968424

你可能感兴趣的:(Qt,qt)