缩放后QT调整大小问题

时间:2011-06-14 11:38:17

标签: qt resize zooming qlabel

我正在尝试使用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 个答案:

答案 0 :(得分:1)

您需要 QScrollArea 来保存您的QLabel。否则,当窗口调整大小时,您的QLabel 会有滚动条。

查看示例,了解如何创建图像查看器以及它们如何调整大小。

ImageViewer example

Zoomable Picture Viewer

答案 1 :(得分: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);
}