Qt布局setStretch()后获取部件大小不更新的解决办法

创建部件加入布局中,并设置拉伸因子
在这里插入图片描述

    QHBoxLayout* layout = new QHBoxLayout(this);

    btn = new QPushButton("btn");
    btn1 = new QPushButton("btn1");
    btn2 = new QPushButton("btn2");
    btn3 = new QPushButton("btn3");
    layout->addWidget(btn);
    layout->addWidget(btn1);
    layout->addWidget(btn2);
    layout->addWidget(btn3);
    layout->setStretch(0, 1);
    layout->setStretch(1, 2);
    layout->setStretch(2, 3);
    layout->setStretch(3, 4);

    qDebug() << "btn: " << btn->width();
    qDebug() << "btn1: " << btn1->width();
    qDebug() << "btn2: " << btn2->width();
    qDebug() << "btn3: " << btn3->width();

打印出的部件宽度:
在这里插入图片描述

解决方案:

在绘图事件 paintEvent() 中获取部件大小(注意要在构造函数先生成部件,不然先调用paintEvent访问的是未初始化的指针):
在这里插入图片描述
打印出的部件宽度:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/TheKoi/article/details/125912225