Qt在控件未显示时如何获取正确的控件尺寸

Posted 骑单车的攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt在控件未显示时如何获取正确的控件尺寸相关的知识,希望对你有一定的参考价值。

因为打算全屏显示一个对话框,而对话框内有几个QLabel的尺寸要在确定QLabel可用的最大尺寸后,再根据内容调整一次,所以在对话框构造函数内就想确定QLabel的最大尺寸,但因为QWidget::updateGeometry()和QWidget::update()都只能用于可见的控件,所以如何在控件不可见时(构造函数内)就可以确定控件布局的最终效果呢?

    //widget为需要强制刷新布局的控件,如对话框等
    widget->setAttribute(Qt::WA_DontShowOnScreen);
    widget->show();
    widget->hide();
    widget->setAttribute(Qt::WA_DontShowOnScreen, false);

上述方式即可解决此问题,因为此过程不会显示在界面上,并且执行速度很快,所以对用户来说没有影响。

另外如果是对话框的一级子控件在对话框设置为全屏时,子控件的尺寸也是会立即调整的,但二级子控件以及之后的控件就未必会立即重算尺寸了,比如QTabWidget的子tab控件就不会立即重算。。。

注意上述方式要慎用,可能导致Qt事件派发不正常的情况,最好用在比较确定的流程中。

 

其实在对话框的显示过程中,当执行到对话框的showEvent()时,对话框内控件的尺寸就都是正确的了,所以在对话框内override showEvent函数也是一种可选方案。但因为我还要再调整一次QLabel尺寸,如果在此时调整会导致对话框在显示到屏幕后,再移动一次QLabel的位置(也和在QLabel周围用到了垂直弹簧verticalSpacer有关),总之因为不想每次对话框显示后都看到控件移动位置,所以没有用在showEvent()内修改控件尺寸的方式。

以上是关于Qt在控件未显示时如何获取正确的控件尺寸的主要内容,如果未能解决你的问题,请参考以下文章

Qt控件背景图片自适应

QT控件自适应窗口大小怎么搞

Qt中获取控件所在界面的位置,该怎么解决

Dojo tabContainer 未正确显示 Dojo 控件

WebView 控件怎么设置显示位置和大小

MFC如何将窗口中所有控件大小随父窗口大小改变