4

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

4

1 回答 1

1

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,请不要对其应用一般性。stylesheetQTableView

这样,如果所有其他QTableViews都被归类为 be myAwesomeTableView,那么您可以将您的stylesheet内容替换为:

myAwesomeTableView::item
{
    padding-left:10px;
    height:40px;
    width:80px;
    color: #5a5a5a;
    border-bottom :1px solid #f0f0f0;
}

如果你总是希望另一个QTableView有红色文本,而是定义第二个子类,并通过处理它stylesheet而不是像我那样在代码中实现它。根据该列中的值,我需要不同的行在单个列上具有不同的文本颜色。要通过 执行此操作,请为参数stylesheet创建另一个子类,并按如下方式实现:QTableViewmyOtherAwesomeTableViewstylesheet

myOtherAwesomeTableView::item
{
    padding-left:10px;
    height:40px;
    width:80px;
    color: #ff0000;
    border-bottom :1px solid #f0f0f0;
}

让我知道这是否对您有帮助...

于 2016-02-15T11:43:54.593 回答