gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:33:45 25 4
gpt4 key购买 nike

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

关于c++ - 如何避免 QlistView 中的数据在双击时被清空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28230038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com