Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Lagovas от Август 14, 2012, 23:03



Название: Синхронный вызов show без возврата управления
Отправлено: Lagovas от Август 14, 2012, 23:03
Как можно вызвать show или его аналог какой то, что бы возврат управления был после закрытия окна?
Код:
widget.show();
doSomething();
Что бы doSomething() выполнилось лишь после закрытия widget. В шарпе без возврата был просто show(), без - showDialog(). Здесь такого не нашел. Нашел только как модальным нормально сделать и все. По ходу нужно подписываться на какой нить closeEvent этого виджета? Просто как то чрезмерно для виджета который используется в одной лишь функции лишь показать инфу, создавать слот, лишь для того, что бы выполнить действия после закрытия, вместо прозрачного использования в одном лишь методе, вместо лишних сигналов и слотов.


Название: Re: Синхронный вызов show без возврата управления
Отправлено: LisandreL от Август 14, 2012, 23:26
У наследников QDialog есть exec().


Название: Re: Синхронный вызов show без возврата управления
Отправлено: Lagovas от Август 14, 2012, 23:30
Т.е. достаточно заменить наследование с qwidget на qdialog и все ок станет? Странно что не у каждого виджета такое есть, раз они по умолчанию могут окном быть, ибо не всегда хватит повесить на destroyed слот, ибо это для всех закрытий окна будет действовать, а бывает нужно отработать закрытие в конкретном контексте...


Название: Re: Синхронный вызов show без возврата управления
Отправлено: QtCoder от Август 15, 2012, 06:40
Как можно вызвать show или его аналог какой то, что бы возврат управления был после закрытия окна?
Код:
widget.show();
doSomething();
Что бы doSomething() выполнилось лишь после закрытия widget. В шарпе без возврата был просто show(), без - showDialog(). Здесь такого не нашел. Нашел только как модальным нормально сделать и все. По ходу нужно подписываться на какой нить closeEvent этого виджета? Просто как то чрезмерно для виджета который используется в одной лишь функции лишь показать инфу, создавать слот, лишь для того, что бы выполнить действия после закрытия, вместо прозрачного использования в одном лишь методе, вместо лишних сигналов и слотов.

widget.setAttribute(Qt::WA_DeleteOnClose);
QEventLoop loop;
connect(&widget, SIGNAL(destroyed(QObject *), &loop, SLOT(quit()));
widget.show();
loop.exec();
doSomething();

А вообще надо юзать qdialog


Название: Re: Синхронный вызов show без возврата управления
Отправлено: Lagovas от Август 15, 2012, 09:46
Спасибо. Сделал себе QDialog, но на будущее знать обходные пути не помешает.