Reputation: 386
I have problem to scrollable for my custom image Widget.
This is my custom image Widget.
imagewidget.h:
#ifndef IMAGEWIDGET_H
#define IMAGEWIDGET_H
#include <QWidget>
#include <QImage>
#include <QString>
#include <QPaintEvent>
#include <QAbstractScrollArea>
class ImageWidget: public QWidget
{
public:
explicit ImageWidget(QWidget *parent = 0);
QImage m_Image;
void loadImage(const QString &fileName);
protected:
void paintEvent(QPaintEvent *event);
};
#endif // IMAGEWIDGET_H
imagewidget.cpp:
#include "imagewidget.h"
#include <QPainter>
#include <QPoint>
#include <QDebug>
#include <QScrollBar>
ImageWidget::ImageWidget(QWidget *parent): QWidget(parent)
{
}
void ImageWidget::loadImage(const QString &fileName)
{
if(!fileName.isNull()){
m_Image.load(fileName);
this->update();
qDebug()<<"Load Image"<<endl;
}
}
void ImageWidget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
if(!m_Image.isNull()){
p.drawImage(QPoint(0,0),m_Image);
}
qDebug()<<"Paint Event"<<endl;
}
And this is mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QScrollArea>
#include <QString>
#include <QFileDialog>
#include <QWidget>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
scrollArea(new QScrollArea())
{
ui->setupUi(this);
m_Image = new ImageWidget(this);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(m_Image);
setCentralWidget(scrollArea);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionOpen_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/", tr("Image Files (*.png *.jpg *.bmp *.tif *.tiff)"));
m_Image->loadImage(fileName);
m_Image->adjustSize();
this->update();
}
With a large image, the image cannot diplay with scroll bar.
My result is below. Thank you for reading.
Upvotes: 0
Views: 1263
Reputation: 56
You forget to set ImageWidget minimumsize.
void ImageWidget::loadImage(const QString &fileName)
{
if(!fileName.isNull()){
m_Image.load(fileName);
setMinimumSize(m_Image.size()); //add this line
this->update();
qDebug()<<"Load Image"<<endl;
}
}
ScrollArea shows scrollbars when its size is smaller than content's widget (ImageWidget in this case). You just load image and paint it on widget but not change widget's size.
:) My first answer on stackoverflow.
Upvotes: 4