Qt MDI区域子窗口显示后的构造->;()无法更新窗口大小

Qt MDI区域子窗口显示后的构造->;()无法更新窗口大小,qt,size,Qt,Size,我有一个程序,它在QT MDI区域构造一个子窗口,显示它,然后更新这个窗口的内容。 这个程序很大,但我已经尝试(希望成功)在下面的小程序中重现这个问题。 在程序的中间,有一行评论说:“如果这篇文章被评论,那就OK!” 正如它所说的,如果这一行被注释,那么整个子窗口内容在Qt进入事件循环之前被创建,一切都很好。。。 但是:如果行在那里,那么MDI子窗口的内容分两步构造(就像在我的原始程序中一样),但是只有第一步中构造的内容显示出来 运行下面的小程序。。。 …如果你现在抓住子窗口(用鼠标),移动它,

我有一个程序,它在QT MDI区域构造一个子窗口,显示它,然后更新这个窗口的内容。 这个程序很大,但我已经尝试(希望成功)在下面的小程序中重现这个问题。 在程序的中间,有一行评论说:“如果这篇文章被评论,那就OK!” 正如它所说的,如果这一行被注释,那么整个子窗口内容在Qt进入事件循环之前被创建,一切都很好。。。 但是:如果行在那里,那么MDI子窗口的内容分两步构造(就像在我的原始程序中一样),但是只有第一步中构造的内容显示出来

运行下面的小程序。。。 …如果你现在抓住子窗口(用鼠标),移动它,那么Qt会突然意识到大小错误,并更新子窗口内容

从一开始我就想不出任何正确的方法

我正在linux(Fedora)上运行Qt4.8.0-7

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
QMdiArea*g1;
QGroupBox*g1a;
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
QMainWindow*主窗口=新建(QMainWindow);
主窗口->设置对象名称(“主窗口”);
主窗口->调整大小(200200);
主窗口->设置窗口标题(“你好”);
g1=新的QMdiArea(主窗口);
主窗口->设置中心Widget(g1);
主窗口->显示();
g1a=新的QGroupBox(“g1a”,g1);
QVBoxLayout*g1a_l=新的QVBoxLayout(g1a);
g1a_l->addWidget(新的QLabel(“LABEL1”);
QMdiSubWindow*子窗口=新的QMdiSubWindow(g1);
子窗口->设置小部件(g1a);
子窗口->设置属性(Qt::WA_DeleteOnClose);
app.processEvents();//如果这一个已注释,则确定!
g1a_l->addWidget((QLabel*)新的QLabel(“尼斯标签2”);
g1a_l->addWidget((QLabel*)新的QLabel(“尼斯标签3”);
g1a_l->addWidget((QLabel*)新的QLabel(“尼斯标签4”);
g1a_l->addWidget((QLabel*)新的QLabel(“尼斯标签5”);
g1a_l->addWidget((QLabel*)新的QLabel(“尼斯标签6”);
g1a_l->addWidget((QLabel*)新的QLabel(“尼斯标签7”);
sub_window->show();//如何获得它以重新包含其内容的大小?
返回app.exec();
}

谢谢你的帮助

使用
调整尺寸
方法:

sub_window->show(); // here or after adjustSize
sub_window->adjustSize();

它将调整大小以适应子窗口内容()。

它可以工作,但它假设我可以在最后完成。在我的程序中,子窗口被创建,附加到MDI区域,然后以多种可能的不同方式填充(“填充”实际上是子窗口创建者的不同派生类,它是它们的公共基类。子窗口是在基类构造函数中创建的)。有没有办法在创建子窗口时达到同样的效果?(即,告诉子窗口对其内容更改作出反应)。作为旁注,这仅适用于mdi区域。如果我改为创建对话框(QDialog),那么当对话框的内容更新时,对话框的大小会调整…没有剩余空间。。。但我想说:谢谢你的帮助/时间!
sub_window->show(); // here or after adjustSize
sub_window->adjustSize();