Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: fiery xray от Август 14, 2011, 01:37



Название: [решено] Вызвать диалог сразу после первой отрисовки главного окна, поверх окна
Отправлено: fiery xray от Август 14, 2011, 01:37
У меня программа, которая соединяется с внешним файлом (базой данной), который лежит у неё в корне.
Я хочу, чтобы она при запуске смотрела, есть он у неё в корне или нету, и если нету, вызывала диалог "выберите файл".

Она его действительно вызывает, если эту проверку осуществить, допустим, в конструкторе.
Однако мне хочется, чтобы этот диалог не просто выводился в самом начале, а выводился поверх моего главного окна в самом начале.

Дело в том, что если его вывести в конструкторе, тогда он выведется до вызова метода show() моего окна (это естественно).
Я пробую переопределить метод showEvent, однако и этот метод вызывается до отрисовки! в документации так и написано:

Non-spontaneous show events are sent to widgets immediately before they are shown

ну вот, а мне хочется сразу после того как в первый раз shown

я вот ещё подумал, можно таймер задействовать, а нет ли чего-нибудь поизящней?


Название: Re: Вызвать диалог сразу после первой отрисовки главного окна, поверх окна
Отправлено: fiery xray от Август 14, 2011, 01:43
наверно можно переопределить сам метод show в котором сначала вызвать show от класса-родителя, а затем эту проверку

updнет, плохо, метод не виртуальный. это под критерий изящности не подходит.

upd2 Зато работает! ну и фиг с ним, всё равно моё окно никто в вектор запихивать не будет


Название: Re: [решено] Вызвать диалог сразу после первой отрисовки главного окна, поверх окна
Отправлено: fiery xray от Август 14, 2011, 02:02
всё правильно, я думаю, у нас тут не джава какая-нибудь, чтобы все подряд методы виртуальными делать
главному окну совсем не неприлично переопределить show()


Название: Re: [решено] Вызвать диалог сразу после первой отрисовки главного окна, поверх окна
Отправлено: LisandreL от Август 14, 2011, 03:17
show() - не виртуальный. НО show()  - этот вызов setVisible( true ).
А вот setVisible - виртуальный.


Название: Re: [решено] Вызвать диалог сразу после первой отрисовки главного окна, поверх окна
Отправлено: fiery xray от Август 14, 2011, 16:27
да, правда.
это даже более логично - теперь проверка не при одном show() а всегда при setVisible(true)

теперь всё идеально. спасибо