Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: White Owl от Февраль 22, 2012, 23:10



Название: Список флагов хочу
Отправлено: White Owl от Февраль 22, 2012, 23:10
Имеются объект. У объекта есть набор бинарных флагов. Флагов много (несколько десятков). У каждого флага есть код и описание.
В базе оно объявлено примерно так:
Код:
create table Objects( ObjectID integer PK, ....)
create table Flags(Code char(4) PK, Description varchar(100))
create table ObjectFlags(ObjectID integer, FlagCode char(4), PK(ObjectID, FlagCode) )
В классе описывающем объект я соответственно имею QStringList flags; поле в котором храню кода тех флагов которые взведены для объекта.
Спрашивается, как это лучше всего (и проще всего) организовать с точки зрения GUI? Чтобы юзер в диалоге видел список всех возможных флагов, и легко мог включать/выключать их а так же сортировать и искать нужный флаг.
Пока я это сделал через QTableWidget с тремя полями - Код, Описание и Да/Нет. Но вся обвязка этого выглядит ужасающе... Мне почему-то кажется что задача более-менее стандартная и для нее уже должны быть велосипеды.


Название: Re: Список флагов хочу
Отправлено: Silver_swift от Февраль 24, 2012, 09:12
QCheckBox?


Название: Re: Список флагов хочу
Отправлено: Bepec от Февраль 24, 2012, 09:18
Тут походу SQL моделька ;) А в них я ещё не путался.


Название: Re: Список флагов хочу
Отправлено: andrew.k от Февраль 24, 2012, 10:34
Я не понял почему флаги в QStringList и char хранятся.
Было бы проще представить гуй, если бы привел пример объектов и флагов, чтобы понимать, что они означают для человека.
Можно попробовать два листбокса рядом. Слева доступные, справа заданные для выбранного объекта. И их можно перебрасывать туда-сюда, тем самым присваивая объекту.
А почему таблица флагов сделана без ключа?


Название: Re: Список флагов хочу
Отправлено: White Owl от Февраль 24, 2012, 17:59
Я не понял почему флаги в QStringList и char хранятся.
В char(4) по историческим причинам. В QStringList чтобы не изобретать еще один словарь перекодировки :)

Можно попробовать два листбокса рядом. Слева доступные, справа заданные для выбранного объекта. И их можно перебрасывать туда-сюда, тем самым присваивая объекту.
О! Точно. Как же это я забыл о таком простом решении? Спасибо. Так и сделаю.