Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QAction и глобальные настройки 
:(
    Опции темы
Majestio
Дата 31.5.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.12.2010

Репутация: нет
Всего: нет



Внезапно  :P возник вопрос ...

Разработка проекта движется к завершению. Но Заказчик настоятельно затребовал две фичи:

1) Настройка внешнего вида UI в плане размеров иконок и шрифтов
2) Разграничение полномочий пользователей - кому что-то можно, кому-то что-то из действий нельзя

У меня все действия описаны QAction'ами, но они разбросаны по коду, мама-не-горюй.
Хотелось бы их собрать воедино в какой-нить глобально видимый класс и изменять все одним циклом.
Но есть большие сомнения, что это неосуществимая мечта. Дело в том, что в разработанном мною UI
есть части кода (Виджеты) которые вызываются по N-копий одновременно. Если объявить один QAction,
спрашивается с какой копией он будет работать ...

А с другой стороны вопрос, как в рилтайме одним щелчком перегрузить UI?
Навскидку только приходит идея переписать QAction, чтобы он мог регаться в каком-то глобальном классе
и предоставлять классу возможность себя изменять...

Что скажете?
PM MAIL WWW   Вверх
borisbn
Дата 1.6.2013, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



> как в рилтайме одним щелчком перегрузить UI?
Используй styleSheet'ы

> Что скажете?
Скажу, что кроме требований заказчика (кстати, вполне адекватных) ничего не понял.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Majestio
Дата 1.6.2013, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.12.2010

Репутация: нет
Всего: нет



Цитата(borisbn @ 1.6.2013,  09:08)
> как в рилтайме одним щелчком перегрузить UI?
Используй styleSheet'ы


Да, придется описать это глобально. 
У меня стили применяются кусочками в разных местах.
Нужно делать чего-то типа сводной таблицы.

Цитата(borisbn @ 1.6.2013,  09:08)

> Что скажете?
Скажу, что кроме требований заказчика (кстати, вполне адекватных) ничего не понял.


По требованию заказчика №2 - я должен обеспечить запрет некоторых действий в программе. Типа "уровень-админ", работает с программой свободно, "уровень-оператор" - может только редактировать, но не имеет право формировать отчеты. На уровне кода - запрет я хотел бы организовать через QAction::setEnabled ( bool ), но нужно это как и в 1 варианте со стилями - "1-м щелчком" и по действиям всего приложения.
PM MAIL WWW   Вверх
borisbn
Дата 1.6.2013, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



По п.2 я бы делал так: при создании QAction, который д.б. админский, заношу указатель на его в глобальный (видимый ото всюду (блин, как это правильно пишется...)) список типа g_adminActions, делаю сразу при создании enabled = false, а при включении режима админа прохожу по этому списку и говорю всем enabled = true.
Т.к. ты говоришь, что создание QAction'ов разбросано по всему коду, то чтобы найти все эти места можно воспользоваться компилятором: открываешь файл qaction.h, и переносишь все конструкторы в секцию private, компилируешь, по списку ошибок вылавливаешь все места, где ты создаёшь QAction'ы, заносишь их в вышеуказанный список, возвращаешь файл qaction.h в исходное состояние.
Не красиво, зато дёшево, удобно и практично )) 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Majestio
Дата 1.6.2013, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.12.2010

Репутация: нет
Всего: нет



Цитата(borisbn @ 1.6.2013,  12:04)
По п.2 я бы делал так: при создании QAction, который д.б. админский, заношу указатель на его в глобальный (видимый ото всюду (блин, как это правильно пишется...)) список типа g_adminActions, делаю сразу при создании enabled = false, а при включении режима админа прохожу по этому списку и говорю всем enabled = true.
Т.к. ты говоришь, что создание QAction'ов разбросано по всему коду, то чтобы найти все эти места можно воспользоваться компилятором: открываешь файл qaction.h, и переносишь все конструкторы в секцию private, компилируешь, по списку ошибок вылавливаешь все места, где ты создаёшь QAction'ы, заносишь их в вышеуказанный список, возвращаешь файл qaction.h в исходное состояние.
Не красиво, зато дёшево, удобно и практично ))

Хорошее решение. У меня созрело похожее - наследоваться от QAction и в конструкторе забить регистрацию, в деструкторе отмену регистрации. Так же ввести понятие "атрибута доступа". Который извне можно будет изменять. По простому - да .. enabled, disabled. Можно еще попробовать ввести visible для "владельца" QAction. Тогда доступ можно будет формализовать почти, а ля unix - "rwx". Попробую, потом отпишусь.

А перебивку кода делаю просто - есть плагин для Far'а для поиска и замены по регэкспам в группе файлов. Ничего более удобного я не видал. Хотя в QtCreatore есть рефакторинг кода - нож нормуль.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.