crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Визуализация в GUI Битовой маски, Редактирование битовых полей
JohnZ
  опции профиля:
сообщение 5.1.2017, 15:08
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Прошу не пинать за нубский вопрос, после праздников моск не варит :-)
Есть объекты (Роли) у каждого из которых в его маске должен быть установлен
всего один бит, от 1-го до 32-го. Посоветуйте плз как это лучше реализовать ?
Может есть примерчик, буду премного благодарен !
32 RadioButton-а на диалоге выглядят не очень кузяво, а примерчика со списком
с тригерными чеками не нашёл. С тригерными в смысле только один чек-бокс
или RadioButton м.б. включен.

Сообщение отредактировал JohnZ - 10.1.2017, 14:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 6.1.2017, 13:06
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2911
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 199 раз(а)




Репутация:   34  


JohnZ, думаю, подойдёт QComboBox со значениями

"выключено"
"0"
"1"
...
...
"30"
"31"


Сообщение отредактировал Алексей1153 - 6.1.2017, 13:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 8.1.2017, 16:50
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Я когда-то видел примерчик подобного элемента, список с чеками, но вотЪ не могу вспомнить где ?!
КомбоБокс не совсем в тему, т.к. это будет настройка ролей в проекте, и поэтому было-бы вполне
логичным заюзать именно список с чеками...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.1.2017, 19:28
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 901
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 138 раз(а)




Репутация:   8  


Список с чеками можно сделать из любой модели, надо просто возвращать нужный Check State
http://doc.qt.io/qt-5/qt.html#CheckState-enum
в data в ответ на Qt::CheckStateRole, любой QList/Table/TreeView нарисует чекбоксы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.1.2017, 8:02
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2911
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 199 раз(а)




Репутация:   34  


Цитата(JohnZ @ 5.1.2017, 17:08) *
Есть объекты (Роли) у каждого из которых в его маске должен быть установлен
всего один бит
, от 1-го до 32-го.


по ТЗ работаем всего с одним битом, поэтому я предложил комбобоскс ) Не сказано, что работа с набором битов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 9.1.2017, 10:57
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 901
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 138 раз(а)




Репутация:   8  


Ну если мы начали за ТЗ, то правильно будет автоматически назначать бит новой роли, т.к. пользователь легко может заблудится в 32х чекбоксах/радиобатонах.
В качестве альтернативы можно замутить слайдер или спинбокс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 10.1.2017, 13:42
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Прошу прощения, я малость ошибся с ТЗ. Роли находятся в конфе, и в маске у каждой из них
установлен действительно всего один бит, но в пунктах меню есс-сно будет набор битов, т е
какой роли этот пункт будет доступен, такие биты в его маске и будут выставляться.
Можно кАнЭшна каждой роли сделать отдельное меню, и в зависимости от входа юзера
выбрать меню сугубо для его роли, а можно сделать одно полное меню на весь проект(ы)
и строить меню динамически по маске роли только нужные пункты. дабы не захламлять
меню как в "Галактике" и др...
Пока сделал через нумерацию бит, как на скрине, но как вы понимаете эта нумерация
будет на "совести" разработчика, дабы в конфе не было 2-х одинаковых масок у ролей ...
Хотелось-бы как-то упростить создание ролей и масок меню для разраба ...
Получается нужно 2 списка с чеками, один из которых в триггерном режиме.

Сообщение отредактировал JohnZ - 10.1.2017, 14:01
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.1.2017, 9:00
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2911
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 199 раз(а)




Репутация:   34  


JohnZ, насколько я понял теперь, проблема в том, что нужно назначить каждой роли свой бит в маску, но этот бит желательно сделать фиксированным (и не пересекающимся с другими ролями, само собой), поскольку сохранение значений будет происходить в базу.

В данном случае вижу избыточность "id роли"+"имя роли"+"бит роли" , дополнительные силы уйдут на поддержание соответствия трёх компонентов сущности

я бы просто ввёл мнемоназвания (и перечислил в енум) для ролей. В виде цифры нигде (файлы, база) не сохранять. Сохранять мнемоназвание

компилятор их автоматом пронумерует от 0, понятно, но это абсолютно нам не интересно, эти числа никуда не сохраняются, они используются только для нумерации внутри инстанса программы. Мнемоимя пусть возвращает функция, на вход которой подаётся ee_myroles

enum ee_myroles
{
  role_admin,       //мнемоимя "role_admin"
  role_director,     //мнемоимя "role_director"
  role_operator,     //мнемоимя "role_operator"
};

QString GetNameOfRole(ee_myroles r)const
{
   switch(r)
  {
        case role_admin: return "role_admin";
        case role_director: return "role_director";
        case role_operator: return "role_operator";

  }
  return "";
}


Ну и теперь роли - это не маска, а список имён через разделитель "role_admin,role_operator". По вкусу QString с разделителем или же QStringList либо QMap

Сообщение отредактировал Алексей1153 - 11.1.2017, 9:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 11.1.2017, 10:16
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 901
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 138 раз(а)




Репутация:   8  


Или так:
CREATE TABLE roles (bit_mask INTEGER PRIMARY KEY, name TEXT);
INSERT INTO roles VALUES (0x0001, '<END>')

Теперь когда нам нужно добавить новую роль мы апдейтим строку <END>, и добавляем новый <END> со следующей маской.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 11.1.2017, 20:52
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 11.1.2017, 9:00) *
JohnZ, насколько я понял теперь, проблема в том, что нужно назначить каждой роли свой бит в маску, но этот бит желательно сделать фиксированным (и не пересекающимся с другими ролями, само собой), поскольку сохранение значений будет происходить в базу.

Совершенно верно, каждой роли назначается свой бит в маску, но это делает сам разраб !
И роли НЕ пишутся в БД, то что на скрине, - это конфиг в XML-е, т е роли лежат в конфиге и ложит их туда разраб
под свой конкретный проект. Ведь скажем, в Складах или в Магазине абсолютно нет необходимости
в роли бухгалтера по ЗП и т д, т е состав ролей в основном зависит от разрабатываемого проекта ...
В БД планируется ложить Юзера с паролем и его маску доступной ему роли(-ей) в данном проекте, которая формируется
разрабом из списка в конфиге, тот что на скрине ... В enum-ах особо не вижу необходимости, в данном случае.

2 Lanz - Там ещё проще, как я описалЪ выше :-)

PS: Ну ткните наконец-то меня в список с чеками :-) src plz plz plz :-)

Сообщение отредактировал JohnZ - 12.1.2017, 13:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.2.2017, 3:54