QT Изменение размера. Проблема после увеличения

StackOverflow https://stackoverflow.com/questions/6342894

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь увеличить картинку, используя 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

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

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