gpt4 book ai didi

c++ - 在 QScrollArea 中缩放 QWidget

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:06 24 4
gpt4 key购买 nike

我想在 Qt 上显示一个像素图并能够缩放,我在 QScrollArea 中使用 QWidget,但是该区域的滚动条不起作用,当我放大图像时,图像变大了,但是没有滚动条所以我可以移动,让我给你看一些代码:

这是我声明小部件的方式:

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

像素已更新,但小部件的大小未更新!

关于c++ - 在 QScrollArea 中缩放 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com