我正在为我们的产品使用commmon css,其中包含QTableView的模板,如下所示
QTableView::item
{
padding-left:10px;
height:40px;
width:80px;
color: #5a5a5a;
border-bottom :1px solid #f0f0f0;
}
在一种情况下,我想将QTableView的文本颜色更改为红色。我是通过遵循QAbstractTableModel
的数据函数中的代码来完成的if (role == Qt::TextColorRole || role == Qt::ForegroundRole)
{
QColor color(Qt::red);
QBrush brush (color);
brush.setStyle(Qt::SolidPattern);
return brush;
}
但是,文本的颜色没有变化,它从CSS中获取颜色。 任何帮助将不胜感激。
答案 0 :(得分:0)
我对textcolor
内的QSqlTableModel
更改进行了以下操作,对CustomSqlTableModel
进行了分类,以允许覆盖setData()
并提交,并添加自定义刷新功能。对于QAbstractItemModel
个实例,以下内容应该相同:
QVariant ExampleSqlTableModel::data(const QModelIndex &idx, int role) const
{
if (role == Qt::ForegroundRole)
{
QColor color;
// Only the display names need to be coloured.
if(idx.column() == 1)
{
int value = CustomSqlTableModel::data(1, Qt::DisplayRole).toInt();
switch(value)
{
case 0: color = QColor(Qt::yellow); break;
case 1: // same as 2
case 2: color = QColor(Qt::blue); break;
case 3: color = QColor(Qt::green); break;
case 4: // same as 5
case 5: color = QColor(Qt::red); break;
default: color = QColor(Qt::black); break;
}
}
return QVariant(color);
}
return CustomSqlTableModel::data(idx,role);
}
我还建议你的小部件更具体一些。对您希望QTableView
影响的所有stylesheet
个实例进行子类化,如果它会影响文本颜色,则不要将常规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;
}
让我知道这是否有助于你...