Reputation: 389
In my code below, qDebug()
inside of the paintSection
is being called, however, the QPixmap
is not being drawn into the header column.
Reproducible example:
class HeaderView : public QHeaderView
{
Q_OBJECT
public:
HeaderView(Qt::Orientation orientation, QWidget *parent = nullptr)
: QHeaderView(orientation, parent)
{
}
QPixmap pixmap = QPixmap(":/files/icon.png");
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override
{
switch (logicalIndex)
{
case 0:
{
painter->drawPixmap(rect.x(), rect.y(), rect.width(), rect.height()
, pixmap);
//painter->fillRect(rect, QColor(255, 255, 255));
qDebug() << rect;
break;
}
default:
break;
}
QHeaderView::paintSection(painter, rect, logicalIndex);
}
};
class TreeView : public QTreeView
{
Q_OBJECT
public:
QStandardItemModel model;
HeaderView* headerView;
TreeView(QWidget* parent = 0) : QTreeView(parent)
{
setModel(&model);
setIndentation(0);
setUniformRowHeights(true);
setRootIsDecorated(false);
setSortingEnabled(true);
headerView = new HeaderView(Qt::Horizontal);
setHeader(headerView);
model.setHorizontalHeaderItem(0, new QStandardItem("column0"));
model.setHorizontalHeaderItem(1, new QStandardItem("column1"));
model.setHorizontalHeaderItem(2, new QStandardItem("column2"));
header()->setDefaultAlignment(Qt::AlignCenter);
header()->setMinimumSectionSize(100);
}
};
#include "treeview.h"
Application::Application(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
TreeView* treeView = new TreeView(this);
}
Upvotes: 0
Views: 49
Reputation: 389
While searching about, I found that the painter needs to be saved/restored to make it work:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override
{
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
switch (logicalIndex)
{
case 0:
{
painter->drawPixmap(rect, pixmap);
break;
}
default:
break;
}
}
Upvotes: 1