1

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); 画像が小さすぎます

そして、これが私が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);
        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続け、ズームを続けると、ズームは機能しますが、スクロールバーがないため、他の部分を見ることができます画像。

私が理解できない場合は教えてください!ありがとう !

4

1 に答える 1

0

私は自分の質問に対する答えを見つけました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 );
   }     
 }

ピクセルは更新されましたが、ウィジェットのサイズは更新されませんでした!

于 2014-08-21T08:42:44.013 に答える