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

How to resize QWidget in a layout while aligning it to the center and maintaining aspect ratio

本文关键字:对齐 调整 布局 QWidget      更新时间:2023-10-16

好的,所以我想用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);

我搜索了谷歌,找不到任何东西。不久前也问过一个类似的问题,但从答案来看,我似乎没有问得足够清楚。谢谢。

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

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