| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QAction и глобальные настройки |
| Автор: Majestio 31.5.2013, 20:58 |
| Внезапно :P возник вопрос ... Разработка проекта движется к завершению. Но Заказчик настоятельно затребовал две фичи: 1) Настройка внешнего вида UI в плане размеров иконок и шрифтов 2) Разграничение полномочий пользователей - кому что-то можно, кому-то что-то из действий нельзя У меня все действия описаны QAction'ами, но они разбросаны по коду, мама-не-горюй. Хотелось бы их собрать воедино в какой-нить глобально видимый класс и изменять все одним циклом. Но есть большие сомнения, что это неосуществимая мечта. Дело в том, что в разработанном мною UI есть части кода (Виджеты) которые вызываются по N-копий одновременно. Если объявить один QAction, спрашивается с какой копией он будет работать ... А с другой стороны вопрос, как в рилтайме одним щелчком перегрузить UI? Навскидку только приходит идея переписать QAction, чтобы он мог регаться в каком-то глобальном классе и предоставлять классу возможность себя изменять... Что скажете? |
| Автор: borisbn 1.6.2013, 09:08 |
| > как в рилтайме одним щелчком перегрузить UI? Используй styleSheet'ы > Что скажете? Скажу, что кроме требований заказчика (кстати, вполне адекватных) ничего не понял. |
| Автор: Majestio 1.6.2013, 09:30 | ||||
Да, придется описать это глобально. У меня стили применяются кусочками в разных местах. Нужно делать чего-то типа сводной таблицы.
По требованию заказчика №2 - я должен обеспечить запрет некоторых действий в программе. Типа "уровень-админ", работает с программой свободно, "уровень-оператор" - может только редактировать, но не имеет право формировать отчеты. На уровне кода - запрет я хотел бы организовать через QAction::setEnabled ( bool ), но нужно это как и в 1 варианте со стилями - "1-м щелчком" и по действиям всего приложения. |
| Автор: borisbn 1.6.2013, 12:04 |
| По п.2 я бы делал так: при создании QAction, который д.б. админский, заношу указатель на его в глобальный (видимый ото всюду (блин, как это правильно пишется...)) список типа g_adminActions, делаю сразу при создании enabled = false, а при включении режима админа прохожу по этому списку и говорю всем enabled = true. Т.к. ты говоришь, что создание QAction'ов разбросано по всему коду, то чтобы найти все эти места можно воспользоваться компилятором: открываешь файл qaction.h, и переносишь все конструкторы в секцию private, компилируешь, по списку ошибок вылавливаешь все места, где ты создаёшь QAction'ы, заносишь их в вышеуказанный список, возвращаешь файл qaction.h в исходное состояние. Не красиво, зато дёшево, удобно и практично )) |
| Автор: Majestio 1.6.2013, 15:31 | ||
Хорошее решение. У меня созрело похожее - наследоваться от QAction и в конструкторе забить регистрацию, в деструкторе отмену регистрации. Так же ввести понятие "атрибута доступа". Который извне можно будет изменять. По простому - да .. enabled, disabled. Можно еще попробовать ввести visible для "владельца" QAction. Тогда доступ можно будет формализовать почти, а ля unix - "rwx". Попробую, потом отпишусь. А перебивку кода делаю просто - есть плагин для Far'а для поиска и замены по регэкспам в группе файлов. Ничего более удобного я не видал. Хотя в QtCreatore есть рефакторинг кода - нож нормуль. |