QTableView/ пользовательская модель таблицы: установить цвет текста в заголовке

Моя пользовательская модель таблицы основана на QAbstractTableModel и затем отображается в QTableView,

Выглядит так:

Я хотел бы изменить цвет текста для определенных заголовков строк, который может быть решен в модели. Можно ли раскрасить определенные заголовки оттуда? Я не мог найти путь до сих пор. Я обнаружил настройку фона / цвета текста для всех заголовков, а не для особых. Цвет должен быть своего рода разметкой для пользователя.

1 ответ

Решение

Что вам нужно сделать, это переопределить QAbstractTableModel::headerData(), В зависимости от значения раздела (индекс заголовка начинается с нуля) вы можете индивидуально стилизовать элементы заголовка. Соответствующие значения для переднего плана (= цвет текста) и фона в Qt::ItemDataRole: Qt::BackgroundRole а также Qt::ForegrondRole

Например, вот так:

QVariant MyTableModel::headerData(int section, Qt::Orientation orientation, int role) const {
  //make all odd horizontal header items black background with white text
  //for even ones just keep the default background and make text red
  if (orientation == Qt::Horizontal) {
    if (role == Qt::ForegroundRole) {
       if (section % 2 == 0)
          return Qt::red;
       else
         return Qt::white;
    }
    else if (role == Qt::BackgroundRole) {
       if (section % 2 == 0)
          return QVariant();
       else
         return Qt::black;
    }
    else if (...) {
      ...
      // handle other roles e.g. Qt::DisplayRole
      ...
    }
    else {
      //nothing special -> use default values
      return QVariant();
    }
  }
  else if (orientation == Qt::Vertical) {
      ...
      // handle the vertical header items
      ...
  }
  return QVariant();
}
Другие вопросы по тегам