如何避免 QlistView 中的数据在双击时被清空?

How to avoid the data in a QlistView getting blanked out on a double click?

我正在使用 QListView 来显示一些数据并允许用户就地更改记录。

我有以下代码可以让用户双击一个项目并重命名它:

listView_->setEditTriggers(QAbstractItemView::DoubleClicked |
                             QAbstractItemView::SelectedClicked); 

但是,当用户点击它时,数据会被清空。我希望当前数据保留在那里,用户可以对其进行编辑。

我怎样才能做到这一点?

这是我的 setData()data()flags() 实现 -

bool
myModel::setData(const QModelIndex & index,
  const QVariant & value, int role) {
  if (index.isValid() && role == Qt::EditRole)  {
    stringModel_.replace(index.row(), value.toString());
    emit dataChanged(index, index);
    return true;
  }
  return false;
}

QVariant
myModel::data(const QModelIndex &index,
    int role) const {
  if (index.isValid() && index.row() <= stringModel_.size()
      && role == Qt::DisplayRole) {
    return stringModel_[index.row()];
  }
  else {
    return QVariant();
  }
}

Qt::ItemFlags
myModel::flags(const QModelIndex & index) const {
  if (!index.isValid()) {
    return Qt::ItemIsEnabled;
  }
  return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}

您应该在 data() 实施中添加 Qt::EditRole

QVariant
myModel::data(const QModelIndex &index,
    int role) const {
  if (index.isValid() && index.row() <= stringModel_.size()
      && (role == Qt::DisplayRole || role == Qt::EditRole) ) {
    return stringModel_[index.row()];
  }
  else {
    return QVariant();
  }
}