Для чего нам нужен QTreeWidgetItem::setData(int column, int role, const QVariant & value), если в результате отображение данных всё равно текстовом формате? Пример использования:
void AbonentWidget::updateTreeItem( QTreeWidgetItem* pTreeWidgetItem, const AMR::CMeterParams& oMeterParams )
{
AMR_ASSERT( oMeterParams.isValidSerialNum() );
if( pTreeWidgetItem )
{
AMR::DatabaseStruct::CCommissioning oCommissioning = AMR::Settings().getDatabase().load_commissioning( oMeterParams.getCommissioningUuid() );
pTreeWidgetItem->setData( 0, Qt::UserRole, oMeterParams.getModelStr() );// зачем используется здесь?
pTreeWidgetItem->setText( 0, oMeterParams.getFamilyString() );// если в результате используем здесь?
pTreeWidgetItem->setText( 1, oMeterParams.getModelStrCustom() );
pTreeWidgetItem->setText( 2, oMeterParams.getSerialStr() );
pTreeWidgetItem->setText( 3, oMeterParams.getFirmware() );
pTreeWidgetItem->setText( 4, oCommissioning.getPeriod() );
}
else AMR_ASSERT_FALSE();
}
С ролью Qt::UserRole первый вызов
setData(int column, int role, const QVariant& value)
добавит в столбец column QTreeWidgetItem'а роль Qt::UserRole со значением value. Каждый последующий вызов setData с тем же столбцом(column) и ролью(Qt::UserRole) будет изменять значение(value), которое соответствует этой роли.
Роль это просто признак для модели, какой из методов для чтения или записи внутренних членов будет вызван у итема. Внутри итема может быть много данных, которые инизиализируются при его создании, например картинка заднего фона. Мы можем как получить ссылку на картинку вызвав у модели data(...) c необходимой ролью Qt::DecorationRole
QVariant data(const QModelIndex& index, Qt::DecorationRole)
так и перезаписать эту картинку вызвав уже setData()
bool setData(const QModelIndex &index, const QVariant &value, Qt::DecorationRole)
Для примера метод data(...)
QVaraint MyModel::data(const QModelIndex& index, Qt::DecorationRole) const
{
if(index.isValid() == false)
return QVariant();
QVariant result;
MyItem* item = static_cast<MyItem*>(index.internalPointer());
switch (role):
{
case Qt::DecorationRole:
result = item->getBackground();
break;
case Qt::UserRole + 1:
result = item->getUserRolePlusOneValue();
break;
}
return result;
}
Каждый QTreeWidgetItem внутри содержит вектор:
QVector< QVector<QWidgetItemData> > values;
где, QVector<QWidgetItemData>
это вектор пар (роль, значение), то есть для каждого столбца у вас есть множество ролей, в соответствии с которыми вы получаете значения.
Еще раз, вызвав для итема
pQTreeWidgetItem->setData(0, Qt::UserRole, const QVariant& value);
вы добавляете нулевому столбцу итема роль Qt::UserRole со значением value; вы можете прочитать это значение вызвав
value val = pQTreeWidgetItem->data(0, Qt::UserRole).toValue();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Привет! Пытаюсь скомпилять это чтоб создать нагрузку на свой rsyslog для тестирования сжатияНо эта зараза ни в какую не хочет компиляться, ругается...
Есть функция, принимающая параметр PTCHAR path, этим параметром мне нужно передать текущую директорию (откуда запущен exe), склеенную со статичной...
Добрый день! Как правильно записать данные в sqlite, и соответственно считать их на с++? Данные представляют собой несколько переменных разных...