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());

問題は、ウィジェットの高さがゼロ以外 (私の場合は約 400) であるにもかかわらず、前後で同じ数値を取得することです。なんで?

4

1 に答える 1

2

ウィンドウは既に表示されており、挿入しようとしているウィジェットはまだ表示されていません。レイアウトにより、それらは非同期で表示されます (invokeMethod呼び出しQt::QueuedConnectionモードで)。

呼び出しが実際に行われるのを待つか、QApplication::processEvents()自分で表示することができます。

 QWidget *widget = new SubWidget();
 layout->insertWidget(0, widget);
 qApp->processEvents();
 // or
 widget->show();
于 2012-09-09T22:12:22.053 に答える