繁体   English   中英

如何在Qt上自定义可滚动图像小部件

[英]How can scrollable image widget custom on Qt

我的自定义图像小部件无法滚动。

这是我的自定义图像小部件。

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;
}

这是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();

}

对于大图像,图像无法与滚动条一起显示。 我的结果如下。 感谢您的阅读。 图像浏览器

您忘记设置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的大小小于内容窗口小部件(在这种情况下为ImageWidget)时,会显示滚动条。 您只需加载图像并将其绘制在窗口小部件上,但不更改窗口小部件的大小。

:)我对stackoverflow的第一个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM