这是我的结构。我想找到label_2或QVBoxLayout的总大小,因为它显示了。根据Qt Creator的说法,当我使用verticalLayout_2->width()
时,我总是得到100而verticalLayout_2->height()
总是返回30.它已经设置为扩展,因此我认为它将填充该区域,即385x379。
执行label_2-width()
和label_2-height()
也会导致100x30,无论窗口大小和我认为它会扩展到的区域。
答案 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);
};