如何获得QVBoxLayout区域的大小?

时间:2014-05-24 05:45:27

标签: c++ qt qt-creator

enter image description here

这是我的结构。我想找到label_2或QVBoxLayout的总大小,因为它显示了。根据Qt Creator的说法,当我使用verticalLayout_2->width()时,我总是得到100而verticalLayout_2->height()总是返回30.它已经设置为扩展,因此我认为它将填充该区域,即385x379。

执行label_2-width()label_2-height()也会导致100x30,无论窗口大小和我认为它会扩展到的区域。

1 个答案:

答案 0 :(得分:0)

在您的小部件构造函数运行后,没有太多视觉效果。 setupUi调用在构造函数中发生。一旦事件循环开始,真正的工作就会发生。

您真正的问题是您不应该在任意时间点检查大小。每次更改时都应该检查。要做到这一点,您需要自己的布局。所需要的只是从现有布局派生,并重新实现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);
};