首页 > 解决方案 > 为什么在这个例子中委托中有 Qt::UserRole?

问题描述

我读了一本关于 QT 代表的教程书。有一个简单的例子。我们将 QComboBox 创建为具有 3 个值的编辑器:“”、“Pan”、“Pani”。我们在 TitleDelegate 类中重新实现了3 个方法:createEditor, setEditorData, 。setModelData我理解第一个和第二个。

QWidget * TitleDelegate :: createEditor (QWidget *parent ,const QStyleOptionViewItem &,const QModelIndex &) const 
{
   QComboBox *widget=new QComboBox (parent);
   QStringList itemList; itemList <<""<<"Pan"<<"Pani";
   widget ->addItems(itemList);
   return widget;
}
void TitleDelegate :: setEditorData (QWidget *editor , const QModelIndex &index) const 
{
   QComboBox *widget=static_cast < QComboBox *>( editor);
   int value=index.model () ->data(index ,Qt::EditRole).toInt ();
   widget -> setCurrentIndex (value);
}
void TitleDelegate :: setModelData (QWidget *editor , QAbstractItemModel *model , const QModelIndex &index) const 
{
   QComboBox *widget = static_cast < QComboBox *>( editor);
   int value = widget -> currentIndex ();
   model ->setData(index , widget -> currentText (), Qt::DisplayRole );
   model ->setData(index , value , Qt::UserRole);
}

但我不明白来自setModelData

model ->setData(index , value , Qt::UserRole);

书中有解释:我们必须保存value才能在setEditorData方法中使用它来了解活动列表的元素。

我们为什么使用Qt::UserRole? 我认为我们应该使用Qt::EditRole.

标签: c++qtroles

解决方案


查看有关以下内容的文档Qt::ItemDataRole在此处输入图像描述

但对于用户角色在此处输入图像描述

正如它所说:

对于用户角色,由开发人员决定使用哪些类型,并确保组件在访问和设置数据时使用正确的类型。


推荐阅读