2

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

}

4

2 に答える 2

1

QLabelを保持するにはQScrollAreaが必要です。そうしないと、ウィンドウのサイズが変更されたときに、QLabelにスクロールバーが表示されなくなります。

例を見て、画像ビューアを作成する方法とサイズを変更する方法を確認してください。

ImageViewerの例

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

于 2011-06-14T12:03:28.633 に答える
0

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

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);
}
于 2012-12-17T11:55:31.570 に答える