QScrollArea не работает

Рейтинг: 0Ответов: 1Опубликовано: 17.04.2015

Доброго времени суток: В моем проекте есть виджет Painter : QWidget на который через QPixmap QPainter'ом отрисовывается изображение, QImageView тут уже не нужен. Этот виджет, естественно должен менять размер в соответствии с размером изображения в px. Добавил черех дизайнер QScrollArea и внутрь него запихнул свой виджет, в конструкторе Ui::MainWindow код соответсвтует, parent'ом моего виджета назначается инстанс QScrollArea, но виджет скролла не работает:

Скрин виджета с загруженной картинкой
код загрузки изображения :

void Painter::loadImage() {
    points.clear();
    QString name = QFileDialog::getOpenFileName();
//    QImage image;
    img.load(name);

//    p_map->fromImage(image);
    mode = PaintMode::image;

    if (p_map) delete p_map;
    p_map = new QPixmap(img.width(), img.height());
    p_map->fromImage(img);

    this->resize(img.width(), img.height());
    scroll_widget->verticalScrollBar()->setValue(img.height());
    scroll_widget->horizontalScrollBar()->setMaximum(img.width() + 1000); // Так он увеличивает скролл но при скроллинге ничего не происходит
    this->update();
}

Qt 4.8.5. Почему не работает?

Ответы

▲ 2

Возможно по той причине, что не добавлен Layout для вставляемого в QScrollArea виджета. Об этом в справке к Qt5 написано, вероятно, что и в четвёртой версии та же ситуация. Во всяком случае, если не через дизайнер, а просто в коде вручную создавать виджеты, то вот этот обозначенный Layout обязателен, иначе скролинг не работает.

Update: Вот абсолютно рабочая связка QScrollArea и QWidget с нарисованной на последнем картинкой. Всё скролится, но только при условии использования лэйаутов.