Я думаю, что невозможно со стандартными заголовками (QHeaderView) because of:
Примечание: Каждый заголовок предоставляет данные для самой каждой секции, и не не полагаться на делегировать. В результате вызов функцииsetItemDelegate() заголовка не будет иметь никакого эффекта.
Поэтому вам нужно забыть об этом и отключить его, вы должны реализовать свои собственные заголовки (установить цвет, текст и т. Д.), Но я, конечно, помогу со значением/названием. Я достиг этого с следующим делегатом элемента:
.h:
#ifndef ITEMDELEGATEPAINT_H
#define ITEMDELEGATEPAINT_H
#include <QStyledItemDelegate>
class ItemDelegatePaint : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit ItemDelegatePaint(QObject *parent = 0);
ItemDelegatePaint(const QString &txt, QObject *parent = 0);
protected:
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const;
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget * editor, const QModelIndex & index) const;
void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const;
void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const;
signals:
public slots:
};
#endif // ITEMDELEGATEPAINT_H
Но все это метод не очень полезен здесь, вы можете реализовать его самостоятельно с некоторыми конкретными действиями, я покажу вам основной метод - краски()
void ItemDelegatePaint::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(index.row() == 0 && index.column() == 0)
{
QRect source1 = QRect(option.rect.topLeft(),option.rect.size()/2);
QRect source2 = QRect(option.rect.topLeft(),option.rect.size()/2);
painter->drawLine(option.rect.topLeft(),option.rect.bottomRight());
source1.moveTopLeft(source1.topLeft() += QPoint(source1.size().width(),0));
painter->drawText(source1,"agent reagent");
source2.moveBottomLeft(source2.bottomLeft() += QPoint(0,source2.size().height()));
painter->drawText(source2,"hallide ion");
}
else
{
QStyledItemDelegate::paint(painter,option,index);
}
}
Этот код показывает основную идею, и это не окончательная версия, но вы должны выполнять все эти конкретные действия самостоятельно. Конечно, этот подход не очень прост, вы можете просто создать изображение и установить его в ячейку, но в этом случае изображение не будет хорошим масштабируемым. Мой код работает нормально, если пользователь изменит размер заголовков. Чтобы доказать это, см. Скриншоты разных размеров.


Спасибо;). Я думал, что может быть какой-то тривиальный способ сделать это со стандартным заголовком, который я не знаю. Я понял вашу проблему с круговым движением. Теперь я думаю, стоит ли писать столько кода для создания собственных заголовков, чтобы показать это простое значение заголовка. –
это решение для QTableView работает также в QTableWidget: http://stackoverflow.com/questions/22635867/is-it-possible-to-set-the-text-of-the-qtableview-corner-button –