QTreeView使用总结14,自定义model,控制对齐和颜色

1,简介

前文介绍了使用自定义model的基本方法,重点强调了该方法带来的性能上的优点。
其实自定义model还能更方便地对内容进行一些属性控制,比如前景色、背景色、对齐、文本内容、字体等等。
主要就是在data函数内对各种role进行处理。具体哪些种类可以参考ItemDataRole类型。
下面示例对文本对齐和内容颜色的控制。

2,效果

控制对齐:指定首列左对齐,作为tree层级关系列,显示效果好点。
中间分数列,即第2~6列右对齐,因为都是数字,右对齐容易观看和比对大小。
后面评价列,居中对齐即可。

控制颜色:将所有的不合格标为红色,醒目。

原图效果:
原图效果

进行对齐和颜色处理后的效果:
进行对齐和颜色处理后的效果

3,原理

在上文的基础上,对data函数进行增加处理,
分别处理Qt::TextAlignmentRole、Qt::TextColorRole两种类型属性:

QVariant TreeModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    if (role == Qt::DisplayRole)
    {
        return item->data(index.column());
    }
    else if( role == Qt::TextAlignmentRole )
    {
        if( index.column() == 0 )
        {
            //第1列左对齐
            return QVariant(Qt::AlignVCenter | Qt::AlignLeft);
        }
        else if( index.column() > 0 && index.column() < 6 )
        {
            //第2~6列右对齐
            return QVariant(Qt::AlignVCenter | Qt::AlignRight);
        }
        else
        {
            //其他列居中对齐
            return QVariant(Qt::AlignCenter);
        }
    }
    else if(role == Qt::TextColorRole)
    {
        if(index.column() == 6)
        {
            QString str = item->data(6).toString();
            if(str == QStringLiteral("不合格"))
            {
                //第7列(是否合格)如果不合格就设文本为红色
                return QVariant(QColor("#FF0000"));
            }
        }
        return QVariant();
    }
    return QVariant();
}

4,源码

源码下载地址:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值