Russian Qt Forum

Qt => Общие вопросы => Тема начата: Сергей85 от Апрель 18, 2017, 20:26



Название: QMessageBox: проблема с автозакрытием.
Отправлено: Сергей85 от Апрель 18, 2017, 20:26
Сделал таймер, что по timeout вызывает close мессаджбокса через 30 сек. Однако требуется отображать рядом с клавишей по умолчанию (или просто в тексте мсгбокса) сколько секунд осталось.

Как понимаю, нужно сделать функцию, меняющую detailedText мсгбокса, обновляя в нем инфу об оставшихся секундах. Но 2 затыка: как написать данную функцию и связать ее с timeout таймера (затыки с этими сигналами-слотами); а также как сделать кнопку по умолчанию какую-то конкретную. Например, вместо OK - Cancel.


Название: Re: QMessageBox: проблема с автозакрытием.
Отправлено: Пантер от Апрель 18, 2017, 20:34
1. Отнаследуйся от QDialog
2. Lаведи в наследнике 2 таймера: один меняет текст, второй вызывает close.
3. Profit!!!


Название: Re: QMessageBox: проблема с автозакрытием.
Отправлено: kambala от Апрель 18, 2017, 20:40
что конкретно вызывает сложности? надо:
1. сохранить указатель на QMessageBox в член класса
2. создать свой метод-слот
3. привязать сигнал timeout к этому слоту вместо существующего close()
4. в слоте поменять текст бокса
5. в нужный момент закрыть бокс в этом слоте

а как поменять кнопку по умолчанию можно прочесть в документации.


Название: Re: QMessageBox: проблема с автозакрытием.
Отправлено: Пантер от Апрель 18, 2017, 20:52
что конкретно вызывает сложности? надо:
1. сохранить указатель на QMessageBox в член класса
2. создать свой метод-слот
3. привязать сигнал timeout к этому слоту вместо существующего close()
4. в слоте поменять текст бокса
5. в нужный момент закрыть бокс в этом слоте

а как поменять кнопку по умолчанию можно прочесть в документации.
Можно и так. Мое решение больше подходит, если в проекте такие диалоги используются в нескольких местах.