今天在做项目的时候,要使用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);
这样就完美的解决了问题。