Название: виджеты зависящие от пользовательских разрешений Отправлено: ale4ko от Сентября 22, 2011, 23:28 Привет всем.
В настоящее время разрабатываю программу на Qt 4.7.3 Я хочу, чтобы часть моих виджетов зависели от пользовательских разрешений (permission). Например, я хочу сделать,какие-то виджеты невидимыми (если есть пользователь не являеться админом) но (!) я не хочу писать в своем приложении следующий код: QWidget * MyWidget = .... ... MyWidget-> SetVisible (permission_admin == || == permission_Manager); Может быть у кого-нибудь есть идеи на сей счет? Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: Nimbus от Сентября 23, 2011, 05:19 Не хотите, а придётся ;)
Ну или создайте базовый класс (если для каждого неохота вызывать setVisible), реализуя в нём видимость по пермишнам, для своих виджетов и наследуйте от него необходимые. >permission_admin == || == permission_Manager Что это за конструкция? :) Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: PavelVX от Сентября 23, 2011, 05:31 мне тоже интересно что это за конструкция, но думаю автор хотел так:
permission_admin == true || true == permission_Manager Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: lit-uriy от Сентября 23, 2011, 13:36 >>я не хочу писать в своем приложении следующий код:
приведи пример того, как хочешь Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: ale4ko от Сентября 23, 2011, 20:06 Ну во первых я конечно же ошибся,я имел ввиду
MyWidget-> SetVisible (permissions == Admin || permissions == Manager); Мне хотелось бы что бы виджеты ,при активизировании нового пользователя, могли становиться видимыми и не видимыми, или например не используемыми (SetEnable (false)) Задача написать dll, в которой будет сидеть компонента/некий класс предположим, к которому сможет обращаться некий exe (возможно даже несколько клиентских аппликаций),и каждый виджет в этом ехе будет visible/invisible или enabled/disabled,на основе того что скажет класс в деилельки. Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: asvil от Сентября 24, 2011, 11:05 дллка не нужна.
Несложный путь: 1. Создать глобальную переменную - список всех виджетов, подлежащих "разрешениям". 2. Каждому виджету или объекту назначить имя (setObjectName) 3. Засунуть каждый виджет в глобальную переменнную в п1. 4. Создать глобальный словарь разрешений текущего пользователя QHash(имя объекта, QHash(свойство, значение)) 5. В цикле обновлять свойства всех объектов их переменной п1 исходя из их значений в п4. Примерно. Код: QList<QObject*> objects; Создание разрешения на просмотр выглядит так: Код: QWidget *wdg = new QWidget(); Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: Igors от Сентября 24, 2011, 14:15 Впечатление что в конце-концов дело все равно сведется к банальным if/switch. Пропердии хороши для enable/disable, но вряд ли для чего-то большего. Обычно находятся диалоги которые должны выглядеть по-разному в зависимости от прав пользователя. Их проще модифицировать в runtime (перед show) чем создавать сложную общую конструкцию. Задача близка к demo/full version
Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: ale4ko от Сентября 24, 2011, 22:48 Спасибо большое за ответы!
Наверное воспользуюсь советом Филоненко Михаила. Igors а как же мне построить диалоги если я как раз не хочу использовать банальные if/switch? Мне нужно написать это в отдельном модуле,как я писал раньше, и этот модуль ,как раз, и должен контролировать постройку диалогов для пользователей с разными правами. Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: Igors от Сентября 25, 2011, 09:42 Igors а как же мне построить диалоги если я как раз не хочу использовать банальные if/switch? Что понимать под постройкой/настройкой? Сделать некоторые айтемы disabled? Это прекрасно обобщается, но, как правило, требуется больше. Простой пример: откомпилил демо, по-простому задизаблил Save и Save As. Получил мешок глупых вопросов типа "а почему они серые и что надо делать чтобы они стали доступны?" После бесполезных попыток объяснить что это демо сделал так: сначала Save разрешен, если нажимается, то показывается алерт ("в демо сохранять нельзя") и тогда уже Save становится дизаблед. Мне нужно написать это в отдельном модуле,как я писал раньше, и этот модуль ,как раз, и должен контролировать постройку диалогов для пользователей с разными правами. Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: asvil от Сентября 25, 2011, 14:33 В QVariant можно засунуть callback, который и определит механизм доступа к объекту.
Название: Re: виджеты зависящие от пользовательских разрешений Отправлено: ale4ko от Сентября 25, 2011, 23:45 Ясно.
Спасибо. А кстати, в качестве ключа в QHash хотелось бы передовать какое либо уникальное значение(unique) , wdg->objectName не подойдет, т.к. в разных классах могут быть мэмберы с одинаковыми именами, а какое тогда использовать? |