QTableView-覆盖QAbstractTableModel中的CSS

时间:2016-02-15 06:54:44

标签: qt qtableview qabstracttablemodel

我正在为我们的产品使用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中获取颜色。 任何帮助将不胜感激。

1 个答案:

答案 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;
}

让我知道这是否有助于你...