如何在布局中调整QWidget的大小,同时将其与中心对齐并保持纵横比

时间:2012-06-08 17:34:18

标签: c++ qt alignment qwidget qgridlayout

好的,所以我想用qt显示图像,其中图像使用浏览器调整大小并保持纵横比,同时保持窗口居中。我可以使用纵横比调整大小以正常工作,但是当我将它与Qt :: AlignCenter对齐时,qwidget不再调整大小(仍然是固定大小)。所以基本上,我可以选择工作但不能一起工作。

我尝试做的一个很好的例子就是matlab中的imshow()函数。这样可以在保持纵横比的同时调整图像大小,并使图像在窗口中居中。我的代码是这样的:

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

我搜索谷歌并找不到任何东西。不久之后还问了一个类似的问题,但从答案来看,我没有清楚地问这个问题。感谢。

1 个答案:

答案 0 :(得分:1)

有两件事:首先,了解“视图”的控制类型会有所帮助。 另外,我认为您不需要在父级的resizeEvent()回调中调整子控件“视图”(无论它是什么类型)。

更好的解决方案可能是将子窗口小部件上的sizeHint策略设置为自动扩展。