Название: Работа с несколькими немодальными диалогами Отправлено: zauzza от Июня 12, 2011, 23:49 Имеется список объектов. Для каждого по сигналу interact(int id) можен быть вызван немодальный диалог. Вопросы:
1) Как после завершения диалога узнать, к какому объекту он относился? 2) Нужно чтобы если диалог для какого-то объекта открыт, то новый не открывался. Код примерно такой: Код: class A: public QObject Название: Re: Работа с несколькими немодальными диалогами Отправлено: kambala от Июня 13, 2011, 00:06 1) ну так считать id диалога, отправившего сигнал (sender()) - этот параметр же для этого предназначен?
2) findChildren<Dialog>() и пройтись по этому списку поискать существующий id (он хранится для открытых объектов в m_objects я так понимаю) з.ы. при использовании макросов SIGNAL и SLOT имена параметров писать не нужно - только их типы Название: Re: Работа с несколькими немодальными диалогами Отправлено: zauzza от Июня 13, 2011, 00:19 Да, по поводу второго, я действительно затупил. Всё очень просто.
А вот насчет sender()... Насколько я понимаю, его вообще не рекомендуется использовать. Может есть какой-то другой, более правильный способ? Название: Re: Работа с несколькими немодальными диалогами Отправлено: kambala от Июня 13, 2011, 00:30 Цитата: assistant Warning: This function violates the object-oriented principle of modularity. However, getting access to the sender might be useful when many signals are connected to a single slot. вторая часть утверждения как раз для твоего случаяне нравится sender() - храни список указателей на открытые диалоги в классе (хотя опять же можно воспользоваться findChildren<Dialog>() вместо этого) и для каждого элемента считывай свойство закрылся ли диалог чтоб найти нужный Название: Re: Работа с несколькими немодальными диалогами Отправлено: zauzza от Июня 13, 2011, 01:09 А нормально будет так подредактировать диалог: соединить сигнал finished(int result ) с каким-нибудь слотом и отправить оттуда сигнал finished(int result, int id)? Тогда вообще никаких дополнительных данных хранить не придется.
Название: Re: Работа с несколькими немодальными диалогами Отправлено: kambala от Июня 13, 2011, 03:13 у слота не может быть параметров больше, чем у сигнала. можешь соединить finished(int) с каким-то приватным слотом, который будет отправлять другой сигнал mySignal(result, id)
Название: Re: Работа с несколькими немодальными диалогами Отправлено: Igors от Июня 13, 2011, 08:27 Имеется список объектов. Для каждого по сигналу interact(int id) можен быть вызван немодальный диалог. Вопросы: Конечно так делать не запрещено, но смысл "немодальности" в том что ввод одного параметра принимается/отрабатывается приложением сразу (ну возможно с задержкой для текста). Обычно немодальный диалог создается для каждого типа объекта (а не экземпляра объекта), и когда пользователь сменил объект (на др. того же типа) диалог заряжается новыми данными. А иначе - если пользователь что-то ввел и переключился на др. окно - ситуация тупиковая1) Как после завершения диалога узнать, к какому объекту он относился? Название: Re: Работа с несколькими немодальными диалогами Отправлено: zauzza от Июня 13, 2011, 09:57 у слота не может быть параметров больше, чем у сигнала. можешь соединить finished(int) с каким-то приватным слотом, который будет отправлять другой сигнал mySignal(result, id) Да, я это и имел в виду. Спасибо большое за ответы :)Конечно так делать не запрещено, но смысл "немодальности" в том что ввод одного параметра принимается/отрабатывается приложением сразу (ну возможно с задержкой для текста). Обычно немодальный диалог создается для каждого типа объекта (а не экземпляра объекта), и когда пользователь сменил объект (на др. того же типа) диалог заряжается новыми данными. А иначе - если пользователь что-то ввел и переключился на др. окно - ситуация тупиковая Возможно я что-то неверно понял... Ну вот, допустим, мой список объектов - это список файлов. И по сигналу interact(int id) я хочу показать диалог свойств для файла my_objects[id]. Блокировать основную программму мне не зачем.Название: Re: Работа с несколькими немодальными диалогами Отправлено: Igors от Июня 13, 2011, 10:19 Возможно я что-то неверно понял... Ну вот, допустим, мой список объектов - это список файлов. И по сигналу interact(int id) я хочу показать диалог свойств для файла my_objects[id]. Блокировать основную программму мне не зачем. Стоит подумать нужно ли каждому файлу свое окно, гораздо чаще проще и лучше использовать одно (которое заряжается при выборе файла). В любом случае изменения сделанные в немодальном окне должны приниматься сразу. а не при его закрытииНазвание: Re: Работа с несколькими немодальными диалогами Отправлено: zauzza от Июня 13, 2011, 10:29 Ну а что плохого в том, что мы, например, из файлового менеджера можем открыть несколько диалогов свойств для нескольких файлов? Например пользователь открывает диалог, чтобы поменять права доступа файла, но потом решает проверить для начала права доступа какого-то другого файла. Не терять же ему теперь первый диалог.
Название: Re: Работа с несколькими немодальными диалогами Отправлено: Igors от Июня 13, 2011, 19:42 Ну а что плохого в том, что мы, например, из файлового менеджера можем открыть несколько диалогов свойств для нескольких файлов? Например пользователь открывает диалог, чтобы поменять права доступа файла, но потом решает проверить для начала права доступа какого-то другого файла. Не терять же ему теперь первый диалог. Ничего плохого, напр так делает Finder. Просто есть вероятность что разрешая пользователю открыть N окон, Вы, возможно, усложняете задачу без необходимости. Напр. а как выбрать 1 окно из 10 открытых - нужно добавлять их в меню Window или что-то еще. Нужен inline-editor для ввода строк, сброс его фокуса при переключении и.т.п. Если Вы все это обдумали и учли - на здоровье. А если "просто так" - то может лучше пойти более простым/стандартным путем Название: Re: Работа с несколькими немодальными диалогами Отправлено: GreatSnake от Июня 13, 2011, 21:00 Цитата: Igors Просто есть вероятность что разрешая пользователю открыть N окон, Вы, возможно, усложняете задачу без необходимости. Напр. а как выбрать 1 окно из 10 открытых - нужно добавлять их в меню Window или что-то еще. Обычно для диалогов, а не "top-level windows" так не делается. Finder-а под рукой нет, но в том же Проводнике можно открыть несколько диалогов без всякого списка.Название: Re: Работа с несколькими немодальными диалогами Отправлено: Igors от Июня 14, 2011, 00:03 Finder-а под рукой нет, но в том же Проводнике ... Finder и есть Проводник (Explorer) на Mac :) |