Russian Qt Forum
Июля 04, 2025, 19:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Зарядить popup  (Прочитано 1957 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июня 15, 2011, 00:47 »

Добрый вечер

Есть массив данных которые пользователь может выбирать из списка. Когда элемент выбран нужно показать его свойства для редактирования. Структура элемента

Код
C++ (Qt)
struct CDescriptor {
mEditorType;    // это поле в UI не отображается
mDataType;     // а это popup меню в UI
...
 
// значения которые может принимать mEditorType
enum {
  editor_LineText,
  editor_ColorButton.
  ...
// и.т.л
};
 
// значения которые может принимать mDataType
enum {
 
// если mEditorType == editor_LineText, то mDataType может быть одно из  
  data_SignedReal,       // "Signed Real" (для popup)
  data_UnsignedReal,    // "Unsigned Real"
  data_SignedInt,        // "Signed Integer"
  data_UnsignedInt,    // "Unsigned Integer"    
 
// если mEditorType == editor_ColorButton, то mDataType может быть одно из  
  data_RGB,             // "RGB"      
  data_ARGB,           // "ARGB"      
  ...
// и.т.л
};
 
};
 
При выбора элемента мне нужно зарядить popup нужными строками и установить selection, а когда пользователь выбрал что-то из popup - поменять значение mDataType. Прямолинейная реализация через if/switch выглядит "не очень хорошо" - значений намного больше чем я привел. Как бы это дело автоматизировать? Замечание: к сожалению, я не могу свободно подобрать нужные константы в enum,, т.к. они используются во внешних модулях)

Спасибо
Записан
Zartul
Гость
« Ответ #1 : Июня 15, 2011, 14:43 »

заводите табличку для EditorType
типа
Код
C++ (Qt)
struct EditorTypeInfo
{
EditorType editor_type;
const DataType * data_types;
uint cnt_data_types;
};

 для каждого типа EditorType определяете массив елементов DataType
Код
C++ (Qt)
const DataType table_data_types_LineText[] =
{
  data_SignedReal,       // "Signed Real" (для popup)
  data_UnsignedReal,    // "Unsigned Real"
  data_SignedInt,        // "Signed Integer"
  data_UnsignedInt,    // "Unsigned Integer"
};
 
const DataTypes table_data_types_ColorButton[] =
{
 data_RGB,             // "RGB"      
 data_ARGB,           // "ARGB"
};

ну и формируете таблицу для каждого типа EditorType
Код
C++ (Qt)
EditorTypeInfo table_editor_type_info[] =
{
 { editor_LineText,    table_data_types_LineText,    ARRAY_SIZE( table_data_types_LineText ) },
 { editor_ColorButton, table_data_types_ColorButton, ARRAY_SIZE( table_data_types_ColorButton ) },
};

теперь по этой таблице можно перемещаться, находить нужный тип и ходить по массиву его свойств
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июня 15, 2011, 15:24 »

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

- ARRAY_SIZE у меня был такой
Код
C++ (Qt)
#define ITEMCOUNT(a) (sizeof(a) / sizeof(a[0]))
 

- тексты меню тоже нужны, поэтому
Код
C++ (Qt)
const DataTypes table_data_types_ColorButton[] =
{
 { data_RGB,    "RGB"   },    
 { data_ARGB,  "ARGB"  },
 { 0,  NULL  },     // терминатор чтобы не хранить счетчик (дело вкуса)
};
Думал как сделать "по молодежному" (с использованием STL, template и прочей мишуры) - но ничего не придумал  Улыбающийся
« Последнее редактирование: Июня 15, 2011, 16:09 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 19.