我想在Qt上显示一个像素图,并使其能够缩放,我在QScrollArea内使用一个QWidget,但是该区域的滚动条不起作用,当我缩放图像时,图像会变大,但是没有滚动条,所以我可以移动,让我给你看一些代码:
我是这样声明Widgets的:
_scroll = new QScrollArea(_frame);
_image_widget = new QImageWidget(_scroll);
_scroll->setBackgroundRole(QPalette::Dark);
_scroll->setWidget(_image_widget);
_scroll->setWidgetResizable(true);
_frame是用来显示洞的区域,_image_widget是QImageWidget的一个对象它继承自QWidget
如果我不使用这个:_scroll->setWidgetResizable(true);
,图像就太小了
下面是我如何处理缩放:
void QImageWidget::paintEvent(QPaintEvent *ev) {
QPainter p(this);
if(pixmap() != NULL){
int w = pixmap()->width();
int h = pixmap()->height();
QPixmap map = pixmap()->scaled(w*zoom,h*zoom,Qt::KeepAspectRatio);
p.drawPixmap(0, 0, map );
}
}
void QImageWidget::wheelEvent ( QWheelEvent * e )
{
int x = e->pos( ).x();
int y = e->pos( ).y();
if (e->delta() > 0)
zoom *= 2;
else
if(zoom > 1)
zoom /= 2;
}
所以问题是,正如我所说,图像不断变大,当我缩放,直到它需要QScrollArea
的孔面积,然后当我不断缩放,缩放工作,但没有滚动条,所以我可以看到图像的另一部分。
如果我听不懂就告诉我!谢谢!
我找到了我的问题的答案,我所要做的就是在绘制像素图之前添加这个resize(sizeHint()*zoom);
:
void QImageWidget::paintEvent(QPaintEvent *ev) {
QPainter p(this);
if(pixmap() != NULL){
int w = pixmap()->width();
int h = pixmap()->height();
QPixmap map = pixmap()->scaled(w*zoom,h*zoom,Qt::KeepAspectRatio);
resize(sizeHint()*zoom);
p.drawPixmap(0, 0, map );
}
}
像素更新了,但小部件的大小没有更新!