Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: tornadodead от Март 05, 2012, 12:48



Название: окно в фоновом режиме
Отправлено: tornadodead от Март 05, 2012, 12:48
Отображаю диалоговое окно(модальное, по началу),
Код:
MyDialog.setModel(true);
MyDialog->show();
затем нужно при нажатии кнопки в нем, сделать его не модальным и фоновым
пробую так
Код:
this.setModal(false);
this->setWindowModality(Qt::NonModal);
но как то без успешно


Название: Re: окно в фоновом режиме
Отправлено: mutineer от Март 05, 2012, 12:55
Конечно безуспешно

Цитировать
windowModality : Qt::WindowModality
Changing this property while the window is visible has no effect; you must hide() the widget first, then show() it again.

Цитировать
void    setModal ( bool modal )
This property holds whether show() should pop up the dialog as modal or modeless

Нельзя поменять модальность уже видимого окна


Название: Re: окно в фоновом режиме
Отправлено: tornadodead от Март 05, 2012, 13:02
Цитировать
Нельзя поменять модальность уже видимого окна
и что мне при нажатии кнопки, скрывать, затем заново отображать окно? как то мерцает это все дело=)))


Название: Re: окно в фоновом режиме
Отправлено: Bepec от Март 05, 2012, 13:15
И научиться цитаты добавлять. Зачем вообще модальное окно делать фоновым???

Сей вопрос меня занимает однако...


Название: Re: окно в фоновом режиме
Отправлено: tornadodead от Март 05, 2012, 13:20
И научиться цитаты добавлять. Зачем вообще модальное окно делать фоновым???
Сей вопрос меня занимает однако...
сорри=)))
тут дело такое, нужно вывести пользователю модальное окно, и затем как он подтвердит(или еще что-то), то его сделать не модальным, оно будет отображать некий процесс, а потом уж само закроется=)))


Название: Re: окно в фоновом режиме
Отправлено: Bepec от Март 05, 2012, 13:22
Не проще его убрать нафиг, взамен выведя окно ожидания аля "индикатор, надпись подожжите и красную кнопочку отмены?".

Ну если честно, смысла особого не вижу. Если ты выводишь модальным, так держи марку до конца.


Название: Re: окно в фоновом режиме
Отправлено: mutineer от Март 05, 2012, 13:29
Цитировать
Нельзя поменять модальность уже видимого окна
и что мне при нажатии кнопки, скрывать, затем заново отображать окно? как то мерцает это все дело=)))

Прежде всего стоит читать справку по используемым функциям


Название: Re: окно в фоновом режиме
Отправлено: tornadodead от Март 05, 2012, 13:29
Ну если честно, смысла особого не вижу. Если ты выводишь модальным, так держи марку до конца.
нет сначало нужно действие пользователя, типо подтвердить, а потом уже выполнять задачу, а окошко, должно быть на случай отмены.
Цитировать
Не проще его убрать нафиг, взамен выведя окно ожидания аля "индикатор, надпись подожжите и красную кнопочку отмены?".
так и будет, но при этом доступ должен быть к главному окну.
т.е. когда пользователь подтвердит, сделать типо
Код:
        this->hide();
        this->setWindowModality(Qt::NonModal);        
        this->show();


Название: Re: окно в фоновом режиме
Отправлено: Bepec от Март 05, 2012, 13:37
Это плохо и нервирует пользователя.

Учись интерфейсу у популярных программ. Тот же Total Commander - запрос на копирование - модальное окно с параметрами и кнопкой подтверждения.

Подтверждаешь - остаётся модальное окно с кнопкой "в фоне".

Щёлкаешь "в фоне"  - модальный виджет убирается, отображается сокращённый, немодальный с полосой процесса.


Название: Re: окно в фоновом режиме
Отправлено: tornadodead от Март 05, 2012, 13:41
Это плохо и нервирует пользователя.
Учись интерфейсу у популярных программ. Тот же Total Commander - запрос на копирование - модальное окно с параметрами и кнопкой подтверждения.
Подтверждаешь - остаётся модальное окно с кнопкой "в фоне".
Щёлкаешь "в фоне"  - модальный виджет убирается, отображается сокращённый, немодальный с полосой процесса.
Возможно так и есть, тут смысл не в том, а как из модального сделать не модальное, ну как понял, манипулировать методами hide() и show()


Название: Re: окно в фоновом режиме
Отправлено: GreatSnake от Март 05, 2012, 13:53
Модальность легко решается перегрузкой QCoreApplication::notify(), в котором просто дропаешь все мышиные и клавиатурные события для виджетов модального окна, что в принципе и делает Qt.