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,源码
源码下载地址: