個人的なメモです。
Qtで、MainWindowが作成されてから、paintEventが呼ばれるまでの間の、イベント履歴を取得してみました。
Value Event ----- ---------------------------- 68 QEvent::ChildAdded 68 QEvent::ChildAdded 68 QEvent::ChildAdded 68 QEvent::ChildAdded 33 QEvent::WindowTitleChange 217 QEvent::PlatformSurface 203 QEvent::WinIdChange 34 QEvent::WindowIconChange 75 QEvent::Polish 69 QEvent::ChildPolished 69 QEvent::ChildPolished 69 QEvent::ChildPolished 69 QEvent::ChildPolished 69 QEvent::ChildPolished 13 QEvent::Move 14 QEvent::Resize 17 QEvent::Show 183 QEvent::CursorChange 26 QEvent::ShowToParent 74 QEvent::PolishRequest 76 QEvent::LayoutRequest 78 QEvent::UpdateLater 77 QEvent::UpdateRequest 24 QEvent::WindowActivate 99 QEvent::ActivationChange 7 QEvent::KeyRelease 12 QEvent::Paint
正確なところは知りませんが、QEvent::Showが処理された後で、子ウィジェットのサイズが確定している模様です。QEvent::LayoutRequestまで通過すれば、ウィンドウの中身が完成していると思われます。
ウィンドウが表示される前に、子ウィジェットのサイズを取得したい様な場合、下記のようにするといいかと思います。
bool MainWindow::event(QEvent *e) { bool f = QMainWindow::event(e); { QEvent::Type type = e->type(); if (type == QEvent::LayoutRequest) { // あんなことやこんなことをする } } return f; }