QT Изменение размера. Проблема после увеличения
Вопрос
Я пытаюсь увеличить картинку, используя 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 будет нет есть полосы прокрутки.
Посмотрите на примеры, чтобы увидеть, как создать зрителя изображения и как они изменяются.