我针对文本颜色进行了以下更改,在本质上是QSqlTableModel,子类化为CustomSqlTableModel以允许覆盖setData()和submit,并添加自定义刷新功能。 对于QAbstractItemModel实例,以下内容应该同样适用:
QVariant ExampleSqlTableModel::data(const QModelIndex &idx, int role) const
{
if (role == Qt::ForegroundRole)
{
QColor color;
if(idx.column() == 1)
{
int value = CustomSqlTableModel::data(1, Qt::DisplayRole).toInt();
switch(value)
{
case 0: color = QColor(Qt::yellow); break;
case 1:
case 2: color = QColor(Qt::blue); break;
case 3: color = QColor(Qt::green); break;
case 4:
case 5: color = QColor(Qt::red); break;
default: color = QColor(Qt::black); break;
}
}
return QVariant(color);
}
return CustomSqlTableModel::data(idx,role);
}
我建议您对小部件进行更具体的说明。对于所有要应用样式表的
QTableView
实例进行子类化,并且如果会影响文本颜色,则不要将一般的
stylesheet
应用于
QTableView
。
这样,如果所有其他
QTableViews
都已经被子类化为
myAwesomeTableView
,那么您可以替换您的
stylesheet
内容为:
myAwesomeTableView::item
{
padding-left:10px;
height:40px;
width:80px;
color: #5a5a5a;
border-bottom :1px solid #f0f0f0;
}
如果你想让另一个 QTableView
始终显示红色文本,那么最好定义第二个子类,并通过 stylesheet
处理它,而不是像我这样在代码中实现。我需要在单个列上根据该列中的值使不同行具有不同的文本颜色。要通过 stylesheet
实现这一点,可以创建另一个 QTableView
子类,例如 myOtherAwesomeTableView
,并按以下方式实现 stylesheet
:
myOtherAwesomeTableView::item
{
padding-left:10px;
height:40px;
width:80px;
color: #ff0000;
border-bottom :1px solid #f0f0f0;
}
请告诉我这是否对您有帮助...