我有一个程序在QT MDI区域构建一个子窗口,显示它,然后更新该窗口的内容。 该程序很大,但我已尝试(并希望成功)在下面的小程序中重现该问题。 在程序的中间,有一行注释“如果这个被评论,那么OK!”。 如上所述,如果这一行被注释,则在Qt进入事件循环之前创建整个子窗口内容,一切都很好...... 但是:行是否存在,然后MDI子窗口的内容分两步构建(如我原来的程序),但只显示第一步中构建的内容!
运行下面的小程序... ...如果您现在抓住子窗口(使用鼠标),移动它,然后Qt突然意识到大小错误并更新子窗口内容......
我无法从头开始找出正确的方法。
我在linux(Fedora)上运行Qt 4.8.0-7。
#include <QApplication>
#include <QtCore>
#include <QMainWindow>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <stdlib.h>
QMdiArea* g1;
QGroupBox* g1a;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow* main_window = new(QMainWindow);
main_window->setObjectName("main_window");
main_window->resize(200, 200);
main_window->setWindowTitle("Hello");
g1 = new QMdiArea(main_window);
main_window->setCentralWidget(g1);
main_window->show();
g1a = new QGroupBox("G1A", g1);
QVBoxLayout *g1a_l = new QVBoxLayout(g1a);
g1a_l->addWidget(new QLabel("LABEL1"));
QMdiSubWindow *sub_window = new QMdiSubWindow(g1);
sub_window->setWidget(g1a);
sub_window->setAttribute(Qt::WA_DeleteOnClose);
app.processEvents(); //If this one is commented, then OK!
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label2"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label3"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label4"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label5"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label6"));
g1a_l->addWidget((QLabel*)new QLabel(" Nice Label7"));
sub_window->show(); //How to I get that to recaclulate the size of its contents?
return app.exec();
}
感谢您的帮助!
答案 0 :(得分:0)
使用adjustSize
方法:
sub_window->show(); // here or after adjustSize
sub_window->adjustSize();
它将调整大小以适合sub_window内容(from documentation)。