Russian Qt Forum
Ноябрь 24, 2024, 07:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidget resizeEvent  (Прочитано 2823 раз)
skydion
Гость
« : Февраль 17, 2010, 16:49 »

Привет всем!

Ребята у меня вопрос, начал разбираться с QListWidget, делегатами и всем сопутствующим Улыбающийся
Значит есть у меня QListWidget на форме он лежит горизонтально, направление элементов слева на право,
ресайзится соотвественно вверх, ну или если меняется размер окна то и вверх и в сторону.

Значит мне нужно сделать чтобы елементы (картинки/превюшки) имели ширину равную высоте списка, ну типа ресайзнули список вверх все итемы тоже ресайзнулись и притом ширина равна высоте, значит замутил я делегат

Код:
class PreviewTemplateDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
    explicit PreviewTemplateDelegate(QObject *parent = 0);

    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
};

void PreviewTemplateDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItem myOption = option;

    myOption.displayAlignment = Qt::AlignLeft | Qt::AlignBottom;

    painter->fillRect(myOption.rect, Qt::yellow);
    painter->drawRect(myOption.rect);

    QStyledItemDelegate::paint(painter, myOption, index);
}

QSize PreviewTemplateDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    int height = option.rect.height();

    return QSize(height, height);
}

значит наследую клас class TemplateListWidget : public QListWidget

Код:
void TemplateListWidget::resizeEvent(QResizeEvent *e)
{
//    QSize s = e->size();
//
//    s.setWidth(s.height());
//
//    for(int i = 0; i < this->count()-1; i++)
// item(i)->setSizeHint(s);

//    QListWidget::resizeEvent(e);
}

и теперь вопрос, почему при ресайзе списка итемы не меняються по ширине, если ресайзнуть всю форму тогда меняються, и еще меняються тогда когда ресайзится список в сторону уменшения, тогда итемы меняют свои размеры нормально в сторону уменшения.

если раскоментировать resizeEvent и насильно менять размеры итемов тогда все работает и при ресайзе списка и при ресайзе формы...

ну впринципе работает и хорошо, просто еще интересно все ли я правильно сделал и так ли понял делегаты и принципы отображения модели
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.