Как изменить размер QWidget в макете, выровняв его по центру и сохранив соотношение сторон

Хорошо, поэтому я хотел бы отобразить изображение с помощью qt, где размер изображения изменяется в браузере и сохраняется соотношение сторон, при этом оставаясь в центре окна. Я могу заставить изменение размера с соотношением сторон работать правильно, но когда я выравниваю его с помощью Qt::AlignCenter, размер qwidget больше не изменяется (остается фиксированный размер). В общем, я могу заставить любой вариант работать, но не вместе.

Хорошим примером того, что я пытаюсь сделать, может быть функция imshow() в Matlab. Это изменяет размер изображения при сохранении соотношения сторон, а также центрирует изображение в окне. Код, который у меня есть, выглядит примерно так:

void roilayout::resizeEvent(QResizeEvent *event)
{
    QSize p(roiview->refimage->size());
    p.scale(roiview->view->size(), Qt::KeepAspectRatio);
    roiview->view->resize(p);   
}

и в конструкторе:

roiview = new roiwindow;
roiview->view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
roiview->view->setCursor(Qt::CrossCursor);
roiview->view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
roiview->view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

QHBoxLayout *layoutContainer = new QHBoxLayout;
layoutContainer->addWidget(roiview->view);
setLayout(layoutContainer);

Я искал Google и ничего не мог найти. Также задал аналогичный вопрос некоторое время назад, но из ответов видно, что я недостаточно четко задал вопрос. Спасибо.


person Justin    schedule 08.06.2012    source источник
comment
Получил немного дальше. Если вы замените roivewi-›view-›size() на this-›size(), размер окна изменится. Единственное, положение изображения изменяется, как если бы это было изображение размером 76x76 пикселей...   -  person Justin    schedule 08.06.2012


Ответы (1)


Несколько вещей: во-первых, было бы полезно узнать, что такое тип элемента управления «представление». Кроме того, я не думаю, что вам нужно изменять размер «представления» дочернего элемента управления (каким бы он ни был) в обратном вызове родителя resizeEvent().

Лучшим решением может быть установка политики sizeHint для дочернего виджета на автоматическое расширение.

person PhotoMonkee    schedule 09.06.2012