![]() |
|
![]() ![]() ![]() |
|
Majestio |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
Внезапно :P возник вопрос ...
Разработка проекта движется к завершению. Но Заказчик настоятельно затребовал две фичи: 1) Настройка внешнего вида UI в плане размеров иконок и шрифтов 2) Разграничение полномочий пользователей - кому что-то можно, кому-то что-то из действий нельзя У меня все действия описаны QAction'ами, но они разбросаны по коду, мама-не-горюй. Хотелось бы их собрать воедино в какой-нить глобально видимый класс и изменять все одним циклом. Но есть большие сомнения, что это неосуществимая мечта. Дело в том, что в разработанном мною UI есть части кода (Виджеты) которые вызываются по N-копий одновременно. Если объявить один QAction, спрашивается с какой копией он будет работать ... А с другой стороны вопрос, как в рилтайме одним щелчком перегрузить UI? Навскидку только приходит идея переписать QAction, чтобы он мог регаться в каком-то глобальном классе и предоставлять классу возможность себя изменять... Что скажете? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
> как в рилтайме одним щелчком перегрузить UI?
Используй styleSheet'ы > Что скажете? Скажу, что кроме требований заказчика (кстати, вполне адекватных) ничего не понял. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Majestio |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
Да, придется описать это глобально. У меня стили применяются кусочками в разных местах. Нужно делать чего-то типа сводной таблицы.
По требованию заказчика №2 - я должен обеспечить запрет некоторых действий в программе. Типа "уровень-админ", работает с программой свободно, "уровень-оператор" - может только редактировать, но не имеет право формировать отчеты. На уровне кода - запрет я хотел бы организовать через QAction::setEnabled ( bool ), но нужно это как и в 1 варианте со стилями - "1-м щелчком" и по действиям всего приложения. |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
По п.2 я бы делал так: при создании QAction, который д.б. админский, заношу указатель на его в глобальный (видимый ото всюду (блин, как это правильно пишется...)) список типа g_adminActions, делаю сразу при создании enabled = false, а при включении режима админа прохожу по этому списку и говорю всем enabled = true.
Т.к. ты говоришь, что создание QAction'ов разбросано по всему коду, то чтобы найти все эти места можно воспользоваться компилятором: открываешь файл qaction.h, и переносишь все конструкторы в секцию private, компилируешь, по списку ошибок вылавливаешь все места, где ты создаёшь QAction'ы, заносишь их в вышеуказанный список, возвращаешь файл qaction.h в исходное состояние. Не красиво, зато дёшево, удобно и практично )) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Majestio |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
Хорошее решение. У меня созрело похожее - наследоваться от QAction и в конструкторе забить регистрацию, в деструкторе отмену регистрации. Так же ввести понятие "атрибута доступа". Который извне можно будет изменять. По простому - да .. enabled, disabled. Можно еще попробовать ввести visible для "владельца" QAction. Тогда доступ можно будет формализовать почти, а ля unix - "rwx". Попробую, потом отпишусь. А перебивку кода делаю просто - есть плагин для Far'а для поиска и замены по регэкспам в группе файлов. Ничего более удобного я не видал. Хотя в QtCreatore есть рефакторинг кода - нож нормуль. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |