c++ - 为什么在这个例子中委托中有 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
.
解决方案
推荐阅读
- aws-lambda - 使用 Lambda 函数调用进行粘合
- javascript - 垂直居中容器
- c# - 使用“LibTiff.Net”创建 Geotiff,并添加地理信息
- spring-boot - 如何在 Camunda Spring Boot 应用程序中使用执行侦听器测试 BPMN?
- java - 如何在 Junit 测试中覆盖 catch 块?
- azure - 我们可以在 Azure OMS 中获取自定义日志吗
- c# - ListView SelectedIndexChanged 项目被插入两次
- redux - 安装 React ERR 后无法启动 npm!反应脚本开始
- c# - 如何在 MVC 中设置通配符路由
- javascript - 更改 jQuery 函数显示和悬停