《自定义QTreeView表项颜色、字体、背景色、对齐方式》:系列教程之六
阅读原文时间:2021年04月23日阅读:1

本文属于《QTreeView使用系列教程》之一,欢迎查看其它文章。

在自定义model中修改表项item的文本颜色、字体、背景色以及对齐方式。

1、TreeModel中data函数修改

首先在自定义model类TreeModel中,data()中添加处理font、color、Background、TextAlignment4个role处理逻辑。

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

    TreeItem *item = itemFromIndex(index);
    if (role == Qt::DisplayRole)
    {
        return item->data(index.column());
    }
    else if (role == Qt::FontRole)
    {
        return item->getFont(index.column());
    }
    else if (role == Qt::TextColorRole) {
        return item->getColor(index.column());
    }
    else if (role == Qt::BackgroundRole) {
        return item->getBackground(index.column());
    }
    else if (role == Qt::TextAlignmentRole) {
        return item->getTextAlign(index.column());
    }
    return QVariant();
}

2、TreeItem中添加4个获取函数

QVariant TreeItem::getFont(int column)
{
    if (column == COLUMN_NAME)
    {
        QFont f;
        f.setBold(true);
        return f;
    }
    return QVariant();
}

QVariant TreeItem::getColor(int column)
{
    if (column == COLUMN_PHONE)
    {
        return QColor(Qt::red);
    }
    return QVariant();
}

QVariant TreeItem::getBackground(int column)
{
    if (row() % 2 == 0) // 偶数行
    {
        return QColor(Qt::lightGray);
    }
    return QVariant();
}

QVariant TreeItem::getTextAlign(int column)
{
    if (column == COLUMN_SEX)
    {
        return QVariant(Qt::AlignCenter);
    }
    else if (column == COLUMN_AGE) {
        return QVariant(Qt::AlignVCenter | Qt::AlignRight);
    }
    return QVariant();
}

getFont():仅"名称"列文本字体为粗体,其余列默认;

getColor():仅"电话"列文字颜色为红色,其余列默认;

getBackground():偶数行背景色为"lightGray",奇数行默认;

getTextAlign():"性别"列文本居中,"年龄"列文本居右,其余列默认。

效果:


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

本文涉及工程代码,公众号回复:34ItemFontColor,即可下载。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章