Qtでウィンドウを作成してから描画されるまで

個人的なメモです。

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;
}
カテゴリー: 備忘録   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CAPTCHA(画像認証)

上の画像の最初と最後を除いた3桁の数字を入力して、送信ボタンを押してください。