Проблема изменения размера QT после увеличения - PullRequest
1 голос
/ 14 июня 2011

Я пытаюсь увеличить изображение, используя QT и C ++.

Я унаследовал объекты QLabel в моих классах, чтобы показать картинки.А также поместите этот QLabels в 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 ]

1 голос
/ 14 июня 2011

Вам нужна QScrollArea для хранения вашей QLabel.В противном случае при изменении размера окна QLabel будет , а не иметь полосы прокрутки.

Посмотрите на примеры, чтобы увидеть, как создать средство просмотра изображений и как они изменяют размер.Пример ImageViewer

Просмотр изображений с возможностью масштабирования

0 голосов
/ 17 декабря 2012

Проблема решена, но я не могу ответить на свой вопрос. Когда я добавляю одно и то же событие в родительское окно, проблема решается. Но когда я максимизирую окно, внутренний объект также получает событие и выдает максимизированное окно.

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