如何避免 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();
}
}
我正在使用 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();
}
}