2012-02-01 1 views
0

QT MDI 영역에 서브 윈도우를 구성하고이를 보여 주며 나중에이 윈도우의 내용을 업데이트하는 프로그램이 있습니다. 프로그램 크기는 크지 만, 아래의 작은 프로그램에서 문제를 재현하기 위해 노력했습니다 (그리고 잘하면 succeded). 프로그램 중간에는 "이 코드에 주석이 달린 다음 OK!"라는 주석이 있습니다. 이 줄을 주석 처리하면 Qt가 이벤트 루프에 들어가기 전에 전체 서브 윈도우 내용이 생성되고 모든 것이 정상입니다 ... :하지만 그곳에 줄이 있고 그 다음에 MDI 서브 윈도우의 내용이 구성됩니다 2 단계로 (내 원래 프로그램에서),하지만 첫 번째 단계에서 구축 된 내용 만 나타납니다!Qt MDI 영역 서브 윈도우 생성 후 show ->()가 윈도우 크기를 업데이트하지 못합니다.

아래의 작은 프로그램을 실행하십시오 ... ... (마우스로) 하위 창을 움켜 잡으면 이동 한 다음 Qt가 suddentely 크기가 잘못되었음을 인식하고 하위 창 콘텐츠를 업데이트합니다.

처음부터 올바르게 가져 오는 방법을 찾지 못했습니다.

리눅스 (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

사용 adjustSize 방법 :

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

그것은 sub_window 내용에 맞게 (from documentation)를 크기를 조정합니다.

+0

작동하지만 끝까지 할 수 있다고 가정합니다. MDI 영역에 첨부 된 내 프로그램 인 서브 윈도우는 여러 가지 가능한 방법으로 채워집니다 ("필러"는 공통 기본 클래스 인 서브 윈도우 생성자와 실제로 다른 파생 클래스입니다). 서브 윈도우는 baseclass 생성자). 서브 윈도우 생성 시간을 동일하게 유지하는 방법은 무엇입니까? (즉, 서브 윈도우가 내용 변경에 반응하도록 알리는 것). 참고로,이 작업은 mdi 영역에서만 실패합니다. 대화 상자 (QDialog) 대신 대화 상자를 만들면 대화 상자의 내용이 업데이트 될 때 대화 상자의 크기가 조정됩니다. – user1159290

+0

공간이 없습니다 ...하지만 말하고 싶었습니다 : 도움/시간을 가져주세요! – user1159290