Название: Методы (can) copy, paste и.т.п Отправлено: Igors от Апрель 12, 2018, 10:47 Добрый день
Задумал переделать одно место, работает, но уж очень коряво, и новый код плохо ложится. Банальная реакция на команду (часто из меню). Может, не мудрствуя лукаво, сделать так Код Ну и долить этот интерфейс в 2 базовых класса множественным наследованием. Но как-то засомневался... Может лучше слотами/сигналами? Но каких-то аргументов в их пользу не нашел. Наоборот, нужно чтобы код текущих окон не компилился (abstract class). Предрассудки типа "множ наследование - зло" не рассматриваем. Что я еще мог упустить? Или еще как можно (без сигналов)? Спасибо Название: Re: Методы (can) copy, paste и.т.п Отправлено: qate от Апрель 12, 2018, 15:17 struct CWinCommand {
bool Can(WhatEnum what, cost QString& desc) const = delete; // можем что bool Do(WhatEnum what, cost QString& param = {}) = delete; }; ? Название: Re: Методы (can) copy, paste и.т.п Отправлено: Igors от Апрель 12, 2018, 15:53 struct CWinCommand { В "can" методах строка заполняется (чтобы подставить ее в меню), поэтому по указателю. Ну а в целом это ничего нового не вносит, подробности оформления. bool Can(WhatEnum what, cost QString& desc) const = delete; // можем что bool Do(WhatEnum what, cost QString& param = {}) = delete; }; ? Название: Re: Методы (can) copy, paste и.т.п Отправлено: Авварон от Апрель 12, 2018, 16:31 Не уверен, что это имеет отношение к паттерну "команда"...
Название: Re: Методы (can) copy, paste и.т.п Отправлено: Igors от Апрель 12, 2018, 17:31 Не уверен, что это имеет отношение к паттерну "команда"... Ну слово "команда" можно употреблять и без всякой связи с паттернами :) Есть ли здесь (разумная) альтернатива простецкому "интерфейсу" ?Название: Re: Методы (can) copy, paste и.т.п Отправлено: Авварон от Апрель 12, 2018, 17:41 Не уверен, что это имеет отношение к паттерну "команда"... Ну слово "команда" можно употреблять и без всякой связи с паттернами :) Есть ли здесь (разумная) альтернатива простецкому "интерфейсу" ?Очевидно, что если ваш код будут читать другие, то не надо называть копируемые объекты Синглтонами, синглтоны - Фасадами и тп:) Просто потому, что это создаёт путаницу - например, сразу появляется вопрос - а может, это всё таки команда и вы что-то недоговариваете? Название: Re: Методы (can) copy, paste и.т.п Отправлено: Авварон от Апрель 12, 2018, 17:47 Ну а так, можно например так - при смене фокуса поднимаемся по иерархии виджетов, кастим виджет к интерфейсу ICopyable { bool enabled() = 0; QString text() const; void trigger(); } и поджигаем нужные экшны если есть интерфейс и он enabled()
Название: Re: Методы (can) copy, paste и.т.п Отправлено: Igors от Апрель 12, 2018, 18:18 Ну а так, можно например так - при смене фокуса поднимаемся по иерархии виджетов, кастим виджет к интерфейсу ICopyable { bool enabled() = 0; QString text() const; void trigger(); } и поджигаем нужные экшны если есть интерфейс и он enabled() Это Вы говорите о "синхронизации", т.е. как (или когда) напр метод "canXXX" получит управление. Для меню у меня все айтемы устанавливаются когда юзер тыкнул на меню (берем активное окно и парим copy, paste, delete и.т.п. - все что нужно в меню)Название: Re: Методы (can) copy, paste и.т.п Отправлено: Авварон от Апрель 12, 2018, 18:29 Ну а так, можно например так - при смене фокуса поднимаемся по иерархии виджетов, кастим виджет к интерфейсу ICopyable { bool enabled() = 0; QString text() const; void trigger(); } и поджигаем нужные экшны если есть интерфейс и он enabled() Это Вы говорите о "синхронизации", т.е. как (или когда) напр метод "canXXX" получит управление. Для меню у меня все айтемы устанавливаются когда юзер тыкнул на меню (берем активное окно и парим copy, paste, delete и.т.п. - все что нужно в меню)Так у вас не совсем корректно будут работать шорткаты, ну да ладно. Название: Re: Методы (can) copy, paste и.т.п Отправлено: Igors от Апрель 13, 2018, 09:07 Так у вас не совсем корректно будут работать шорткаты, ну да ладно. Автоматом/пулеметом не будут, нужно перехватить QEvent::ShortcutOverride |