2012-09-09 3 views
1

:새 항목을 삽입 한 후 레이아웃의 높이를 어떻게 얻습니까? Qt는에서

QVBoxLayout *layout = (QVBoxLayout*)this->layout(); 

printf("Before: %d %d\n", this->height(), layout->totalSizeHint().height()); 

QWidget *widget = new SubWidget(); 
layout->insertWidget(0, widget); 
this->updateGeometry(); 
this->adjustSize(); 
this->update(); 
this->repaint(); 

printf("After: %d %d %d\n", this->height(), layout->totalSizeHint().height(), widget->height()); 

문제는 내가이 0 (약 400 내 경우)에있는 위젯의 높이에도 불구하고 이전과 이후에 같은 번호를 얻을 수 있다는 것입니다. 왜?

답변

2

창이 이미 표시되어 있으며 삽입하려는 위젯이 아직 표시되지 않습니다. 레이아웃을 통해 비동기로 표시 할 수 있습니다 (invokeMethodQt::QueuedConnection 모드 호출).

당신은 실제로 QApplication::processEvents()으로 발생하거나 그들에게 자신을 보여주기 위해 전화를 기다릴 수 있습니다 :

QWidget *widget = new SubWidget(); 
layout->insertWidget(0, widget); 
qApp->processEvents(); 
// or 
widget->show(); 
+0

굉장 감사합니다! – chacham15

관련 문제