Russian Qt Forum

Qt => Вопросы новичков => Тема начата: lexaaleynik от Август 29, 2016, 15:36



Название: Управление размером изображений в заголовках таблицы [РЕШЕНО]
Отправлено: lexaaleynik от Август 29, 2016, 15:36
Здравствуйте.
Нужно, чтобы в заголовках таблицы отображались соответствующие иконки.
Для этого я в переопределённом методе 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#msg139184 (http://www.prog.org.ru/index.php?topic=20448.msg139184#msg139184)

UPD 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 определять не нужно.

Вопрос закрыт.