Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Racheengel от Июнь 06, 2018, 13:16



Название: Диалоги :)
Отправлено: Racheengel от Июнь 06, 2018, 13:16
Всем привет,

наверное, тривиальный вопрос, но с точки зрения UX не нахожу пока "правильного" решения, прошу совета)

Итак, у нас есть модальное окошко-диалог, в котором имеется список с объектами и кнопки для их обработки.
Юзер нажимает на кнопку и запускает (относительно) долгий процесс обсчета объектов.
При этом поверх диалога показывается QProgressDialog с кнопкой отмены.

В принципе, всё хорошо, но процесс-обработчик может быть интерактивным - то есть он может иногда запросить от юзера подтвержения действий над очередным объектом. Проблема в том, что если QProgressDialog вызвать с флагом StayOnTopHint, то
диалог подтвержения действий оказывается "под" QProgressDialog и юзер не может с ним толком работать. Если же StayOnTopHint не применять, то QProgressDialog уйдёт под основной диалог, как только появится окошко с действиями.

Как то это кривенько, в общем. Было несколько идей - сместить QProgressDialog вверх или вниз, чтоб он не перекрывал окно с выбором, либо каждый раз делать для него raise(). Но как то все равно костыльно... может, дадите хороший совет какой? :)


Название: Re: Диалоги :)
Отправлено: Пантер от Июнь 06, 2018, 13:35
А заюзать вместо QProgressDialog QProgressBar с кнопкой?


Название: Re: Диалоги :)
Отправлено: Racheengel от Июнь 06, 2018, 13:43
А заюзать вместо QProgressDialog QProgressBar с кнопкой?

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


Название: Re: Диалоги :)
Отправлено: kambala от Июнь 06, 2018, 14:04
может засунуть прогрессбар прямо в диалог? или там показывать % выполнения в заголовке диалога...


Название: Re: Диалоги :)
Отправлено: Авварон от Июнь 06, 2018, 14:34
Кажется, что-то намутили с парентами, на маке я делал несколько вложенных модальных диалогов, по типу такого

https://apple.insidercdn.com/gallery/24576-32330-removedrives-2-xl.jpg (https://apple.insidercdn.com/gallery/24576-32330-removedrives-2-xl.jpg)


Название: Re: Диалоги :)
Отправлено: Пантер от Июнь 06, 2018, 14:44
А заюзать вместо QProgressDialog QProgressBar с кнопкой?

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


Название: Re: Диалоги :)
Отправлено: Racheengel от Июнь 06, 2018, 14:50
Кажется, что-то намутили с парентами, на маке я делал несколько вложенных модальных диалогов, по типу такого

https://apple.insidercdn.com/gallery/24576-32330-removedrives-2-xl.jpg (https://apple.insidercdn.com/gallery/24576-32330-removedrives-2-xl.jpg)

Парентов у этих диалогов нет вообще (потому что они друг о друге не знают архитектурно).
В любом случае, бутерброд из 3+ диалогов нехорошо смотрится с т.з. дизайна.

может засунуть прогрессбар прямо в диалог? или там показывать % выполнения в заголовке диалога...

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

Вот есть идея сделать "мета-диалог", в который все "дети" могут кидать свою инфу, при необходимости кнопки показывать и пр. Но будет ли это практичным - хз..


Название: Re: Диалоги :)
Отправлено: Авварон от Июнь 06, 2018, 14:55


Парентов у этих диалогов нет вообще (потому что они друг о друге не знают архитектурно).

Ну вот вам и ответ на вашу проблему:)

В целом, ничего плохо в 2х диалогах поверх виджета (итого 3 виджета), нет. Выше уже да, проблемы дизайна. Кажется, тогда лучше на визард передедать.
Энивей, если у вас диалог живет пока живет другой диалог, они должны быть состаканы через парента.


Название: Re: Диалоги :)
Отправлено: Racheengel от Июнь 06, 2018, 16:07
Энивей, если у вас диалог живет пока живет другой диалог, они должны быть состаканы через парента.

Эти диалоги друг о друге вообще ничего не знают - даже живут в разных модулях.
Наверное все таки вариант с raise() может быть оправдан...


Название: Re: Диалоги :)
Отправлено: Igors от Июнь 06, 2018, 16:21
В любом случае, бутерброд из 3+ диалогов нехорошо смотрится с т.з. дизайна.
Вернее из 2 модальных. Да, плохо, не годится, модальный диалог должен быть только 1, на то он и модальный.

Да, отображать прогресс в самом (первом) модальном диалоге - очевидно лучше всего, но это не всегда просто сделать. Более дешевый вариант - скрывать первый, ну конечно выждать (может операция короткая), а после завершения операции опять показать. Небогато но приемлемо


Название: Re: Диалоги :)
Отправлено: Авварон от Июнь 06, 2018, 16:33
В любом случае, бутерброд из 3+ диалогов нехорошо смотрится с т.з. дизайна.
Вернее из 2 модальных. Да, плохо, не годится, модальный диалог должен быть только 1, на то он и модальный.

Хмммм, Widget->File->Save As->раз диалог->выбираем существующий файл->два диалог->File already exists, owerwrite?


Название: Re: Диалоги :)
Отправлено: Racheengel от Июнь 06, 2018, 16:56
Хмммм, Widget->File->Save As->раз диалог->выбираем существующий файл->два диалог->File already exists, owerwrite?

2 уровня (как тут) - еще нормально и привычно, но вот 3 - немного перебор... Куча модальных окошек в настройках Винды всегда нервировала :)


Название: Re: Диалоги :)
Отправлено: Igors от Июнь 06, 2018, 17:14
Хмммм, Widget->File->Save As->раз диалог->выбираем существующий файл->два диалог->File already exists, owerwrite?
Исключения подтверждают правила  :) Здесь как раз и нужно 2, без первого неясно к чему относится второй (какой файл?)


Название: Re: Диалоги :)
Отправлено: Авварон от Июнь 06, 2018, 17:38
Исключения подтверждают правила  :)

Чушь, придуманная гуманитариями:)

В Кедах, кстати, первый диалог исчезает, что не оч удобно - приходится начинать всё сызнова, если жамкнул отмену.

Здесь как раз и нужно 2, без первого неясно к чему относится второй (какой файл?)

Как я понял, у топикстартера первый диалог запускает долгую операцию, которая рисуется во втором диалоге. В целом, то же самое, на той же макоси такое встречается повсеместно.
В противном случае, не понимаю, почему действительно нельзя похайдить диалог.


Название: Re: Диалоги :)
Отправлено: Igors от Июнь 06, 2018, 17:51
с флагом StayOnTopHint,
Кстати о птичках: а что там с переключением на др приложение? Окно с этим флагом продолжает торчать? (не гуд). Давненько не обновлялся, может уже сделали


Название: Re: Диалоги :)
Отправлено: Racheengel от Июнь 06, 2018, 18:48
Как я понял, у топикстартера первый диалог запускает долгую операцию, которая рисуется во втором диалоге. В целом, то же самое, на той же макоси такое встречается повсеместно.
В противном случае, не понимаю, почему действительно нельзя похайдить диалог.

Первый диалог толкает модуль, который запускает Процессъ. Но перед этим этот же модуль показывает QProgressDialog. И вот Процессъ работает (в принципе обычно тихо), но иногда не знает, что ему делать.
И показывает диалог с вопросом - а именно QMessageBox. Но он вылазит либо позади QProgressDialog, либо прячет его полностью. В общем и некрасиво, и нетехнично... Диалоги то по умолчанию по центру экрана вылезают, а если там уже что-то есть? :)




Название: Re: Диалоги :)
Отправлено: Авварон от Июнь 06, 2018, 19:16
Если вопрос относится к процессу, то нет ничего плохого в том, чтобы их постакать через this


Название: Re: Диалоги :)
Отправлено: Racheengel от Июнь 07, 2018, 01:31
Если вопрос относится к процессу, то нет ничего плохого в том, чтобы их постакать через this

Процесс не наследник QObject, и не знает о существовании QProgressDialog. Он только может показывать (статическое) окно с вопросами.