本文属于《QTreeView使用系列教程》之一,欢迎查看其它文章。
在自定义model中修改表项item的文本颜色、字体、背景色以及对齐方式。
首先在自定义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();
}
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,即可下载。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章