获取 QWidget 初始大小的可靠方法
Posted
技术标签:
【中文标题】获取 QWidget 初始大小的可靠方法【英文标题】:Reliable way of getting initial size of QWidget 【发布时间】:2018-11-15 21:15:26 【问题描述】:我有一个自定义小部件。它的目的是显示图像(可以缩放、旋转等)。
我的目标是计算图像的初始比例,使其大小与小部件的大小相匹配。
我的第一次尝试是在构造函数中进行,但位置不正确(因为小部件通常在构造后放入布局中,因此它们的大小稍后会更改)。
另一种部分有效的方法是覆盖showEvent
或resizeEvent
并在那里放置初始缩放。它可以部分工作,因为它在桌面上可以正常工作,但由于某种原因它不能在 android 设备上 - QWidget::size()
返回与构造函数中相同的大小。
显然,在最终窗口重新排列之前,会在 android 上调用第一个显示/调整大小事件。
有没有干净的方法来实现它?
【问题讨论】:
【参考方案1】:您可以尝试使用 QLabel,代替或在小部件内部(您可以将其边框设置为 0px)并使用setScaledContents。
【讨论】:
我的小部件具有额外的功能,可让用户对图像进行操作,QLabel
并不能满足我的所有需求。另外,我不希望小部件稍后更改其大小时缩放图像(例如,通过调整整个窗口的大小),QLabel
会发生这种情况
我看不到在 resizeEvent 中它如何显示错误的大小,并且您没有发布任何代码,对此问题非常抱歉...您在调用 QWidget 之前还是之后调用了 QWidget::size(): :resizeEvent(事件)?
我从未说过 resizeEvent
给了我错误的结果。在添加到布局后,我只需要知道小部件的大小,并且所有小部件都放置在适当的位置和大小。在这种情况下,我想获得小部件的大小并适当地缩放图像。以上是关于获取 QWidget 初始大小的可靠方法的主要内容,如果未能解决你的问题,请参考以下文章
QWidget::repaint:更新进度条时检测到递归重绘