Здравствуйте.
Нужно, чтобы в заголовках таблицы отображались соответствующие иконки.
Для этого я в переопределённом методе headerData() для модели добавил обработку DecorationRole:
if((role == Qt::DecorationRole) && (orientation == Qt::Horizontal)) {
switch (section) {
case 2:
return QPixmap(":/images/pics/sign_level.png");
case 6:
return QPixmap(":/images/pics/binarycode.png");
case 8:
return QPixmap(":/images/pics/sound.png");
...
К сожалению картинки отображаются крохотными иконками несколько смещёнными влево от центра хэдэра и с очень большими полями.
Вопрос:
Без переопределения QHeaderView можно обойтись чтобы настроить отображение иконок во весь размер хэдера и если да, то как?
UPD:
Скриншот во вложении
UPD 2:
Посмотрел, что можно сделать через QSS - ничего полезного для меня. Придётся переопределить QHeaderView, как советуют тут:
http://www.prog.org.ru/index.php?topic=20448.msg139184#msg139184UPD 3:
Оказалось переопределить нужно было всего один метод кроме конструктора. И там все просто.
#include <QHeaderView>
#include <QObject>
#include <QPainter>
#include <QDebug>
class QCustomeHV : public QHeaderView
{
Q_OBJECT
public:
QCustomeHV(Qt::Orientation orientation, QWidget * parent = 0) : QHeaderView(orientation, parent) {}
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
QPixmap pm;
switch (logicalIndex) {
case 2:
pm = QPixmap(":/images/pics/sign_level.png");
break;
case 6:
pm = QPixmap(":/images/pics/binarycode.png");
break;
case 8:
pm = QPixmap(":/images/pics/sound.png");
break;
case 9:
pm = QPixmap(":/images/pics/lamp.png");
break;
case 10:
pm = QPixmap(":/images/pics/guard.png");
break;
case 15:
pm = QPixmap(":/images/pics/clocks2.png");
break;
case 16:
pm = QPixmap(":/images/pics/time_active.png");
break;
case 17:
pm = QPixmap(":/images/pics/time_passive.png");
break;
case 19:
pm = QPixmap(":/images/pics/clocks.png");
break;
default:
return;
}
pm = pm.scaledToWidth(rect.width() - 2, Qt::SmoothTransformation);
painter->drawPixmap(QRect(rect.x() + 1, rect.y() + 1, pm.width(), pm.height()),pm);
}
private:
bool isOn;
};
В этом случае DecorationRole определять не нужно.
Вопрос закрыт.