Я нашел этот вопрос: Как изменить цвет фона для заголовка QTreeView (он же QHeaderView)?
Я хочу иметь возможность установить цвет для каждого заголовкараздел.Таким образом, рассмотренный выше вопрос, кажется, является моим решением!
Решение говорит: " Самый простой способ сделать это, вероятно, - вывести новую модель из QAbstractItemModel или другого класса модели ипереопределить headerData () ".Я пошел и посмотрел на дерево исходных текстов Qt для QTableWidget, QTableModel, QTableWidgetItem ... эти классы предположительно являются "моделями по умолчанию", поэтому я подумал, что они будут хорошим примером, и тогда я пойду реализовывать свой собственный QAbstractTableModel,
3 файла, которые я видел, - это колоссальные 3300 строк кода.Это определенно НЕ "самый простой способ" IMO !!!
Мне бы хотелось функциональность QTableWidget, но затем я хочу добавить следующую способность:
- horizontalHeader.setSectionColor (index, цвет)
- verticalHeader.setSectionColor (индекс, цвет)
Действительно ли мне нужно наследовать / реализовывать QAbstractTableModel, если все, что я хочу, это изменить цвет разделаheader?
Обновление:
Я не использую свой собственный вид и классы моделей.Я использую вспомогательный класс QTableWidget прямо сейчас (он называется вспомогательным классом b / c, он реализует представление и модель).Функция headerData()
является частью модели.Класс модели , QTableModel, не доступен через lib / headers Qt, поэтому я не могу наследовать его.
Обновление:
Я попытался создать новый элемент с помощью кисти фона QBrush(QColor(Qt::red))
, а затем установить заголовок таблицы с новым элементом (используя QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem *item)
. Я также попытался наследовать QTableWidgetItem
и переопределив виртуальный метод data()
с помощью:
QVariant HeaderItem::data(int role) const
{
if(role==Qt::BackgroundRole) {
return QVariant(QBrush(QColor(Qt::red)));
} else if(role==Qt::ForegroundRole) {
return QVariant(QBrush(QColor(Qt::green)));
} else {
return QTableWidgetItem::data(role);
}
}
Я могу изменить передний план разделов заголовка. Но когда я пытаюсь изменить фоновую кисть заголовка ... ничего не происходит ... это какФоновая кисть QTableWidgetItem, которую я установил для раздела заголовка, игнорируется.