【问题标题】:Making zooms on an QWidget while inside a QScrollArea在 QScrollArea 内对 QWidget 进行缩放
【发布时间】:2014-08-21 16:42:44
【问题描述】:

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

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

_scroll = new QScrollArea(_frame);
_image_widget = new QImageWidget(_scroll);      
_scroll->setBackgroundRole(QPalette::Dark);
_scroll->setWidget(_image_widget);
_scroll->setWidgetResizable(true);

_frame 是我应该显示洞的区域,_image_widget 是继承自 QWidget 的 QImageWidget 的对象

如果我不使用这个:_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 的孔区域,然后当我继续缩放时,缩放工作但没有滚动条,所以我可以看到图像的另一部分。

如果我无法理解,请告诉我! 谢谢!

【问题讨论】:

  • 看看QGraphicsScene

标签: c++ qt zooming qwidget qscrollarea


【解决方案1】:

我找到了我的问题的答案,我所要做的就是在绘制像素图之前添加这个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 );
   }     
 }

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

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多