Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: unkier от Декабрь 11, 2009, 10:54



Название: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: unkier от Декабрь 11, 2009, 10:54
как правильно связать QListWidgetItem и QTreeWidgetItem с моими данными ?
как узнать к чему относится итем полученный, например через itemAt(...) ?
все эти итемы даже не QObject, а то можно было бы сделать setProperty.
без наследования решается как нибудь ?


Название: Re: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: BRE от Декабрь 11, 2009, 11:00
У этих элементов можно установить свои данные:
void QListWidgetItem::setData ( int role, const QVariant & value )   [virtual]
QVariant QListWidgetItem::data ( int role ) const   [virtual]

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


Название: Re: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: unkier от Декабрь 11, 2009, 11:04
У этих элементов можно установить свои данные:
void QListWidgetItem::setData ( int role, const QVariant & value )   [virtual]
QVariant QListWidgetItem::data ( int role ) const   [virtual]

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


я на это дело смотрел, но role меня смутил. что он символизирует ?


Название: Re: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: BRE от Декабрь 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


Название: Re: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: unkier от Декабрь 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*>’



Название: Re: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: BRE от Декабрь 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


Название: Re: QListWidgetItem и QTreeWidgetItem правильно связать с моими данными
Отправлено: unkier от Декабрь 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.