• 2425阅读
  • 1回复

Layout新增widget,父widget和子widget的尺寸如何更新? [复制链接]

上一主题 下一主题
离线初九利恒
 

只看楼主 倒序阅读 楼主  发表于: 2017-02-16
请教各位版友一个困扰我的问题:父widget QGroupbox,尺寸是fixed的800乘800,在这个父widget的QGridlayout里新增第一个子widget,然后立即显示子widget的尺寸,居然是640x480,但在实际界面上,明明是填满了这个父widget。如果QGridlayout增加第二个子widget,第一个子widget的size居然又变成了780x768,但在实际界面上,明明2个子widget左右平分了父widget。请问如何处理,这个子widget的尺寸才会更新。我试过update,updategeometry,都不行。


以下代码:
//设置一个groupbox作为父widget
gridGroupBox = new QGroupBox(tr("Grid layout"));
gridGroupBox->setFixedSize(800,800);
gridGroupBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
layout = new QGridlayout;
gridGroupBox->setLayout(layout);
然后弄两个按钮来向这个Layout里分别插入两个QTextEdit:
void Dialog::onButton0(bool is_toggled)
{
    Editor1 = new QTextEdit;
    Editor1->setPlainText(tr("editor1 "
                                     "grid layout."));
   // Editor1->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
    if(is_toggled)
    {
        layout->addWidget(Editor1,0,0);
        qDebug()<<"editor1 GEO is "<<layout->getWindow("editor1")->geometry();
        qDebug()<<"editor1 bottom right corner is"<<layout->getWindow("editor1")->geometry().bottomRight();
        qDebug()<<"editor1 corners at global are"<<layout->getWindow("editor1")->mapToGlobal(layout->getWindow("editor1")->geometry().topLeft())
               <<" and "<<layout->getWindow("editor1")->mapToGlobal(layout->getWindow("editor1")->geometry().bottomRight());
        qDebug()<<"its parent widget size is "<<gridGroupBox->geometry();
    }else{
        layout->removeWindow("editor1");
    }



}

void Dialog::onButton1(bool is_toggled)
{
    Editor2 = new QTextEdit;
    Editor2->setPlainText(tr("editor2 "
                                     "grid layout."));
    //Editor2->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
    if(is_toggled)
    {
        layout->addWidget(Editor2, 0, 1);
    }else{
         layout->removeWindow("editor2");
    }

    qDebug()<<"editor1 GEO is "<<layout->getWindow("editor1")->geometry();
    qDebug()<<"editor1 bottom right corner is"<<layout->getWindow("editor1")->geometry().bottomRight();
    qDebug()<<"editor1 corners at global are"<<layout->getWindow("editor1")->mapToGlobal(layout->getWindow("editor1")->geometry().topLeft())
           <<" and "<<layout->getWindow("editor1")->mapToGlobal(layout->getWindow("editor1")->geometry().bottomRight());
    qDebug()<<"its parent widget size is "<<gridGroupBox->geometry();
}

结果输出为:
editor1 GEO is  QRect(0,0 640x480)
editor1 bottom right corner is QPoint(639,479)
editor1 corners at global are QPoint(560,153)  and  QPoint(1199,632)
its parent widget size is  QRect(11,95 800x800)

editor1 GEO is  QRect(10,22 780x768)
editor1 bottom right corner is QPoint(789,789)
editor1 corners at global are QPoint(1107,268)  and  QPoint(1886,1035)
its parent widget size is  QRect(11,95 800x800)

也就是说,
新增第一个widget后,子widget的geometry跟父widget不一样?但实际GUI上填满了整个父widget的。
增加第二个widget后,之前存在的第一个子widget的geometry居然又变得跟父widget一样了。实际GUI上,两个子widget应该左右平分了父widget。

如何拿到layout里widget的正确尺寸呢?
离线初九利恒

只看该作者 1楼 发表于: 2017-02-16
新发现是必须要调用一下->show(),尺寸才更新
快速回复
限100 字节
 
上一个 下一个