Как создать изменяемый эскиз Qt с изменяемым размером? - PullRequest
1 голос
/ 26 апреля 2011

Я работаю над основным средством просмотра / тегом изображений, для которого необходимо выбрать эскиз, чтобы выбрать изображение.До сих пор я использовал QDockWidget, включающий QScrollArea с QHBoxLayout, чтобы содержать серию QLabels, каждый из которых имеет свой набор QPixMap.

Это выглядит очень не элегантно, и становится только уродливее, когда я рассматриваю, как можно реализовать автоматическое масштабирование миниатюр при изменении размера QDockWidget.Это еще более усложняется дополнительной необходимостью изменять размеры миниатюр, когда полоса прокрутки появляется и исчезает.

Должен ли быть лучший способ сделать это?

1 Ответ

2 голосов
/ 02 июня 2011

Я столкнулся с подобной проблемой при попытке анимировать изменение размера qlabel с помощью qpixmap.Метод, который я нашел лучше всего, состоял в том, чтобы вместо этого использовать QWidget и повторно реализовать функцию paintEvent.Тогда ваше изображение QWidget будет автоматически масштабировано, если оно будет изменено.Вот пример:

В моем случае у меня были закрытые переменные в закрытом объекте с именем private _:

bool image_set_;
QImage image_;
QBrush paintbrush_;

void MyClass::paintEvent( QPaintEvent* event )
{   
    // if the QWidget has an image set, then we use our custom painting.
    if( this->private_->image_set_ )
    {
        //I've made it so that my QWidget has a 1px white border
        this->private_->paintbrush_.setTextureImage( this->private_->image_.scaled(QSize( this->width() - 2, this->height() - 2 ) ) );
        QPainter painter( this );
        QRect temp_rect = QRect( 1, 1, this->width()-2, this->height() - 2 );
        painter.fillRect( this->rect(), Qt::white );
        painter.fillRect( temp_rect, this->private_->paintbrush_ );
    }
    else
    {
        QWidget::paintEvent( event );
    }

}

...