获取 QWidget 初始大小的可靠方法

Posted

技术标签:

【中文标题】获取 QWidget 初始大小的可靠方法【英文标题】:Reliable way of getting initial size of QWidget 【发布时间】:2018-11-15 21:15:26 【问题描述】:

我有一个自定义小部件。它的目的是显示图像(可以缩放、旋转等)。

我的目标是计算图像的初始比例,使其大小与小部件的大小相匹配。

我的第一次尝试是在构造函数中进行,但位置不正确(因为小部件通常在构造后放入布局中,因此它们的大小稍后会更改)。

另一种部分有效的方法是覆盖showEventresizeEvent 并在那里放置初始缩放。它可以部分工作,因为它在桌面上可以正常工作,但由于某种原因它不能在 android 设备上 - QWidget::size() 返回与构造函数中相同的大小。

显然,在最终窗口重新排列之前,会在 android 上调用第一个显示/调整大小事件。

有没有干净的方法来实现它?

【问题讨论】:

【参考方案1】:

您可以尝试使用 QLabel,代替或在小部件内部(您可以将其边框设置为 0px)并使用setScaledContents。

【讨论】:

我的小部件具有额外的功能,可让用户对图像进行操作,QLabel 并不能满足我的所有需求。另外,我不希望小部件稍后更改其大小时缩放图像(例如,通过调整整个窗口的大小),QLabel 会发生这种情况 我看不到在 resizeEvent 中它如何显示错误的大小,并且您没有发布任何代码,对此问题非常抱歉...您在调用 QWidget 之前还是之后调用了 QWidget::size(): :resizeEvent(事件)? 我从未说过 resizeEvent 给了我错误的结果。在添加到布局后,我只需要知道小部件的大小,并且所有小部件都放置在适当的位置和大小。在这种情况下,我想获得小部件的大小并适当地缩放图像。

以上是关于获取 QWidget 初始大小的可靠方法的主要内容,如果未能解决你的问题,请参考以下文章

QWidget::repaint:更新进度条时检测到递归重绘

setCentralWidget就可以把Qwidget设置为QMainWindow的主窗口

用指向对象的指针初始化不可复制的第三方基类

可靠的 QWidget 到 QImage 坐标转换?

如何可靠地获取 C 样式数组的大小?

在 C# 中,调整数组大小(在这种情况下增加其大小)会使用默认值初始化新段——这可靠吗?