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

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

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

最佳答案

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

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

关于c++ - 如何在布局中调整 QWidget 的大小,同时将其对齐到中心并保持纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10953479/

相关文章:

c++ - 类名后的模板参数是什么意思?

c++ - (简单 C++)从文件中获取带有 vector 的矩阵

c++ - 如何在 Linux 发行版上将 SFML C++ 源代码从 Linux 编译到 Windows?

python - 使用 Qt 样式表更改状态更改时的图标

html - 在 HTML 中对齐图像组

html - 当大小基于页面宽度时如何使用css水平对齐

c++ - 如何计算 Haskell 中的正弦函数?

c++ - 程序无法在其他 Windows 机器上正常运行

c++ - QSortFilterProxyModel filterAcceptsColumn 无法设置新的索引数据

html - 左右对齐 SVG 以创建并排图像