質問

QTとC ++を使用して写真をズームインしようとしています。

クラスでQlabelオブジェクトを継承して写真を表示しました。また、このqlabelをmdiareaに入れます。

ズーム機能は正常に動作していますが、Qlabelはそのサイズをすぐに更新しません。私がサイズを試みる場合、手動で(カーソル付き)プログラムは自動的に処理し、希望どおりにqlabelをサイズ変更します。

すぐにサイズを更新するにはどうすればよいですか。

手伝ってくれてありがとう。 :)

bool MdiChild::event ( QEvent * e ){
    //qDebug("asd1");
if(e->type() == QEvent::Wheel){
    int numDegrees = ((QWheelEvent*) e)->delta() / 8;
    double numSteps = (double)numDegrees/150;
    int w = pix->width();
    int h = pix->height();
    ratio += numSteps;
    qDebug("ratio = %f", ratio);
    QPixmap* p = new QPixmap(pix->scaledToHeight ( (int)(h * ratio),Qt::FastTransformation  ));
    setPixmap(*p);
    adjustSize();
    adjustSize();
    update();

}
return QWidget::event(e);

 } 

問題は解決されましたが、私は自分の質問に答えることができないと思います。親ウィンドウに同じイベントを追加すると、問題が解決します。しかし、ウィンドウを最大化すると、内側のオブジェクトもイベントを取得し、最大化されたウィンドウをクラッシュさせます。

 bool ImageProcessor::event ( QEvent * e ){
if(e->type() == QEvent::Wheel){
    QList<QMdiSubWindow *> childList = ui.mdiArea->subWindowList();
    for(int i = 0; i<childList.count(); i++){
        childList[i]->adjustSize();
    }
}
return QWidget::event(e);

}

役に立ちましたか?

解決 2

問題は解決されましたが、私は自分の質問に答えることができないと思います。親ウィンドウに同じイベントを追加すると、問題が解決します。しかし、ウィンドウを最大化すると、内側のオブジェクトもイベントを取得し、最大化されたウィンドウをクラッシュさせます。

bool ImageProcessor::event ( QEvent * e ){
if(e->type() == QEvent::Wheel){
    QList<QMdiSubWindow *> childList = ui.mdiArea->subWindowList();
    for(int i = 0; i<childList.count(); i++){
        childList[i]->adjustSize();
    }
}
return QWidget::event(e);
}

他のヒント

あなたには必要だ QSCROLLAREA あなたのqlabelを保持するため。それ以外の場合は、ウィンドウがqlabelのサイズを変更するとき いいえ スクロールバーを持っています。

例を見て、画像視聴者の作成方法とそれらがどのようにサイズ化するかを確認してください。

ImageViewerの例

ズーム可能な画像ビューアー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top