簡體   English   中英

如何獲得QVBoxLayout的區域大小?

[英]How do I get the size of an area of a QVBoxLayout?

在此處輸入圖片說明

這就是我的結構。 我想查找顯示的label_2或QVBoxLayout的總大小。 當我使用verticalLayout_2->width() ,我總是得到100,而verticalLayout_2->height()總是返回30。它設置為expanding,所以我認為它將填滿該區域,根據Qt Creator的說法是385x379。

無論窗口大小和我認為它將擴展到的區域如何,執行label_2-width()label_2-height()也會導致100x30。

運行小部件的構造函數后,視覺上沒有任何操作。 setupUi調用發生在構造函數中。 真正的工作發生在事件循環開始時。

真正的問題是您不應該在任意時間點檢查大小。 您應該在每次更改時進行檢查。 為此,您需要自己的布局。 它所setGeometry就是從現有布局派生並重新實現setGeometry 每當父窗口小部件或父布局調整給定布局的大小時,都會調用此方法。 那是唯一正確的方法,不需要任何技巧即可完成。

例如,以下類可用於在存在新幾何圖形時發出信號:

class SigBoxLayout : public QBoxLayout {
  Q_OBJECT
protected:
  void setGeometry(const QRect & r) Q_DECL_OVERRIDE {
    if (r != geometry()) emit hasNewGeometry(r);
    QBoxLayout::setGeometry(r);
  }
public:
  SigBoxLayout(QBoxLayout::Direction dir, QWidget * parent = 0) : 
    QBoxLayout(dir, parent) {}
  Q_SIGNAL void hasNewGeometry(const QRect & r);
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM