Название: Диалоги :) Отправлено: 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. Он только может показывать (статическое) окно с вопросами. |