QTreeView QTreeWidget改变图标大小

本文介绍了如何在Qt中通过设置QTreeWidget的图标大小,并使用自定义委托来分别设置根节点和子节点图标的尺寸。通过创建MyDelegate类继承QStyledItemDelegate并重写paint和sizeHint方法,实现不同层级节点图标尺寸的变化。
摘要由CSDN通过智能技术生成

零、未改变图标大小

一、设置所有图标大小

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

结果如下图所示。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值