QListView не использует подсказку о размере делегата - PullRequest
0 голосов
/ 02 августа 2011

У меня есть QListView, который отображает пользовательских элементов делегата.Я переопределяю sizeHint() делегата, чтобы предоставить размер, но кажется, что представление списка не принимает это во внимание.Ниже приведен код, который я использую:

CardItemDelegate.h

#ifndef CARDITEMDELEGATE_H
#define CARDITEMDELEGATE_H

class CardItemDelegate : public QStyledItemDelegate {

    Q_OBJECT

public:

    explicit CardItemDelegate(QObject *parent = 0);
    QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index);
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;

};

#endif // CARDITEMDELEGATE_H

CardItemDelegate.cpp

#include "CardItemDelegate.h"

CardItemDelegate::CardItemDelegate(QObject *parent) : QStyledItemDelegate(parent) {

}

QSize CardItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) {
    qDebug() << "size hint called";
    return QSize(100, 30);
}

void CardItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
    painter->save();

    painter->setBrush(Qt::green);
    painter->setPen(Qt::red);
    painter->drawRect(option.rect);

    painter->restore();
}

И вот как я это использую:

DeckListModel* model = new DeckListModel();
ui->deckListView->setModel(model);
ui->deckListView->setItemDelegate(new CardItemDelegate());

Элементы отображаются правильно в виде списка, однако sizeHint() никогда не вызывается (я добавил оператор отладки в вызов для проверки)поэтому предметы не имеют правильный размер.Кто-нибудь может увидеть, в чем может быть проблема?

1 Ответ

3 голосов
/ 02 августа 2011

это из-за несоответствия подписи. Вы пропустили const в конце подписи (код прокрутки).

Должно быть

QSize CardItemDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const
                                                                                                   //^^^^^ - here
...