《自定义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():"性别"列文本居中,"年龄"列文本居右,其余列默认。

效果:
《自定义QTreeView表项颜色、字体、背景色、对齐方式》:系列教程之六_第1张图片

代码地址:https://gitee.com/bailiyang/cdemo/tree/master/Qt/34QTreeViewCustomModel/ItemFontColor


===================================================

===================================================

业余时间不定期更新一些想法、思考文章,欢迎关注,共同探讨,沉淀技术!

            

你可能感兴趣的:(QT)