![]() |
|
|
![]()
|
|
| olegkuzn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
Здраствуйте.
Помогите решить вопрос.
После этого при редактировании данных класса int используется объект класса MySpinBox. Можно ли сделать так, чтобы в разных случаях для разных данных int вызывался свой редактор (Например QComboBox, производный от QLineEdit и т.д.) ? Если можно то как это сделать. Заранее спасибо. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
три раза перечитал.... ИМХО набор букафф.... перефразируй, чтобы попонятней было -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| olegkuzn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
Извините. Постараюсь все переформулировать.
1. Класс QItemDelegate содержит методы : QItemEditorFactory * QItemDelegate::itemEditorFactory () const // возвращает укзатель на объект типа QItemEditorFactory void QItemDelegate::setItemEditorFactory ( QItemEditorFactory * factory ) // устанавливает свойство типа QItemEditorFactory 2. QItemEditorFactory - Класс который предоставляет виджеты для редактирования данных в представлениях через делегат. (При редактировании данных элемента модели в представлении будет использоваться тот виджет который указан в QItemEditorFactory ) 3. Класс QItemEditorFactory содержит набор объектов производных от QItemEditorCreatorBase. 4. Объекты класса производного от QItemEditorCreatorBase являются редакторами для каждого конкретного типа данных хранимых в QVariant. (Модели данных хранят данные в виде QVariant) В моем случае: 1. Создается объект класса QItemEditorFactory - m_itemFactory = new QItemEditorFactory(); 2. Создается специализированный редактор основанный на QSpinBox - QItemEditorCreatorBase* intWidget = new QStandardItemEditorCreator<MySpinBox>(); 3. Этот редактор регистрируется как редактор типа QVariant::Int - m_itemFactory->registerEditor(QVariant::Int, intWidget ); 4. Объект класса QItemEditorFactory устанавливается в делегате - setItemEditorFactory(m_itemFactory); Но разные элементы модели типа QVariant::Int необходимо редактировать разными редакторами (не только производными от <MySpinBox>). Можно ли как-нибудь обойти это препятствие (Например использовать в QVariant пользовательские типы.) или нет. И если можно то как это сделать. Надеюсь сейчас вопрос будет понятнее. |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Кроме названных тобой методов, в QItemDelegate есть ещё:
обычно они и переопределяются, чтобы изменить поведение QItemDelegate. |
|||
|
||||
| olegkuzn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
Первоначально так было и сделано.
Просто хотел попробовать сделать тоже самое с помощью QItemEditorFactory. (Хотел избежать длинных операторов switch{case... case...}) |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Чтобы избавиться от длинных switch, можно задать разные QItemDelegate для разных колонок таблицы.
Соответственно, переопределяя createEditor() или задавая разные QItemEditorFactory (во втором случае производый класс от QItemDelegate делать не обязательно) |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |