QT 实现图片阅读器ScrollArea 滚动条不显示

今天在做项目的时候,要使用QT实现一个图片阅读器,具有放大、缩小、旋转、还原等功能。要怎么做呢?

下面是我的解决思路:

1.使用QPixmap进行图片的读取,放大、缩小、旋转、还原等功能。

2.使用QLabel作为载体,进行图片展示。

3.当放大图片大于窗体的时候,应当显示滚动条。

    int width = ui->picLabel->width()*1.1;
    int height =ui->picLabel->height()*1.1;

    QPixmap fitMap = m_pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->picLabel->setPixmap(fitMap);

但是,使用QT Designer 设计出界面



    为了实现当图片的QLabel大于窗体的时候,出现滚动条,使用了QScrollArea 作为滚动区域。但是这时候问题出现了。当放大图片的时候,已经超过了窗体,但是滚动条仍然没有出现。

怎么回事呢?

查找原因,竟是因为Qt Designer 使用的QScrollArea 的 widgetResizable 默认为 true。

但是如果使用代码 new出来一个QScrollArea的时候,widgetResizable默认为false;

这时候将widgetResizable设置为false, 但是这时候执行结果的时候,还是不能够出现滚动条。

这又是哪里出现问题了? 仔细研究,发现将QScrollArea 下面的 scorllAreaWidgetContents设置一下他的大小,将他的大小设置为与显示的图片一样的大小。这样就可以跨越实现了。

具体代码如下:

    int width = ui->picLabel->width()*1.1;
    int height =ui->picLabel->height()*1.1;

    ui->scrollAreaWidgetContents->resize(width, height); //多加这一行
    QPixmap fitMap = m_pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->picLabel->setPixmap(fitMap);

这样就完美的解决了问题。

猜你喜欢

转载自blog.csdn.net/xiezhongyuan07/article/details/80547080
今日推荐