程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Qt在控件未顯示時如何獲取正確的控件尺寸,qt獲取控件尺寸

Qt在控件未顯示時如何獲取正確的控件尺寸,qt獲取控件尺寸

編輯:C++入門知識

Qt在控件未顯示時如何獲取正確的控件尺寸,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()內修改控件尺寸的方式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved