Russian Qt Forum
Декабрь 28, 2024, 20:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными  (Прочитано 7542 раз)
unkier
Гость
« : Декабрь 11, 2009, 10:54 »

как правильно связать QListWidgetItem и QTreeWidgetItem с моими данными ?
как узнать к чему относится итем полученный, например через itemAt(...) ?
все эти итемы даже не QObject, а то можно было бы сделать setProperty.
без наследования решается как нибудь ?
Записан
BRE
Гость
« Ответ #1 : Декабрь 11, 2009, 11:00 »

У этих элементов можно установить свои данные:
void QListWidgetItem::setData ( int role, const QVariant & value )   [virtual]
QVariant QListWidgetItem::data ( int role ) const   [virtual]

А вот эти данные могут быть:
* указателем на твой объект
* индексом в коллекции (int)
* ключом в коллекции (QString)
....
Записан
unkier
Гость
« Ответ #2 : Декабрь 11, 2009, 11:04 »

У этих элементов можно установить свои данные:
void QListWidgetItem::setData ( int role, const QVariant & value )   [virtual]
QVariant QListWidgetItem::data ( int role ) const   [virtual]

А вот эти данные могут быть:
* указателем на твой объект
* индексом в коллекции (int)
* ключом в коллекции (QString)
....


я на это дело смотрел, но role меня смутил. что он символизирует ?
Записан
BRE
Гость
« Ответ #3 : Декабрь 11, 2009, 11:07 »

я на это дело смотрел, но role меня смутил. что он символизирует ?
http://doc.crossplatform.ru/qt/4.5.0/model-view-model.html#item-roles
http://doc.crossplatform.ru/qt/4.5.0/model-view-programming.html
Записан
unkier
Гость
« Ответ #4 : Декабрь 11, 2009, 11:27 »

спасибо, прояснилось.

теперь другая проблема, данные запихнул вроде, но назад получить не получается.

запихиваю:
Код:
m_list_item->setData(Qt::UserRole, QVariant(QVariant::UserType,this));

получаю
Код:
QVariant var_dev = item->data(Qt::UserRole);
QDevice *dev =  var_dev.value<QDevice*>();

ошибка
Код:
/usr/include/QtCore/qmetatype.h: In static member function ‘static int QMetaTypeId2<T>::qt_metatype_id() [with T = QDevice*]’:
/usr/include/QtCore/qmetatype.h:199:   instantiated from ‘int qMetaTypeId(T*) [with T = QDevice*]’
/usr/include/QtCore/qvariant.h:566:   instantiated from ‘T qvariant_cast(const QVariant&) [with T = QDevice*]’
/usr/include/QtCore/qvariant.h:579:   instantiated from ‘T qVariantValue(const QVariant&) [with T =
QDevice*]’
/usr/include/QtCore/qvariant.h:319:   instantiated from ‘T QVariant::value() const [with T = QDevice*]’
qdraglistwidget.cpp:44:   instantiated from here
/usr/include/QtCore/qmetatype.h:189: ошибка: ‘qt_metatype_id’ is not a member of ‘QMetaTypeId<QDevice*>’

Записан
BRE
Гость
« Ответ #5 : Декабрь 11, 2009, 11:35 »

теперь другая проблема, данные запихнул вроде, но назад получить не получается.
Читай документацию, без этого никак...  Подмигивающий
http://doc.crossplatform.ru/qt/4.5.0/qvariant.html#value
http://doc.crossplatform.ru/qt/4.5.0/qvariant.html
Записан
unkier
Гость
« Ответ #6 : Декабрь 11, 2009, 12:15 »

я ребус разгадал.

по моему эта пометка должна быть шрифтом покрупнее Улыбающийся
Код:
Note: If you are working with custom types, you should use the Q_DECLARE_METATYPE() macro to register your custom type.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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