为什么这个例子的delegate里有Qt::UserRole?
Why there is Qt::UserRole in delegate in this example?
我读了一本关于 QT 委托的教程。有一个简单的例子。我们创建 QComboBox 作为具有 3 个值的编辑器:“”、“Pan”、“Pani”。我们在 TitleDelegate class 中重新实现了 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
.
看看这个 Documentation 关于 Qt::ItemDataRole
:
但是对于用户角色:
如其所说:
For user roles, it is up to the developer to decide which types to use
and ensure that components use the correct types when accessing and
setting data.
我读了一本关于 QT 委托的教程。有一个简单的例子。我们创建 QComboBox 作为具有 3 个值的编辑器:“”、“Pan”、“Pani”。我们在 TitleDelegate class 中重新实现了 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
.
看看这个 Documentation 关于 Qt::ItemDataRole
:
但是对于用户角色:
如其所说:
For user roles, it is up to the developer to decide which types to use and ensure that components use the correct types when accessing and setting data.