qt listview 不能编辑
时间: 2023-07-24 10:31:47 浏览: 59
如果您使用的是 Qt 的 QListView 组件,它默认是不支持编辑的。如果您想让列表项可以编辑,可以考虑使用 QTableView 或 QTableWidget 组件。
但如果您非常想使用 QListView ,也可以通过继承 QStyledItemDelegate 类来实现编辑功能。您需要重新实现它的 createEditor()、setEditorData() 和 setModelData() 三个方法,并在您的ListView中设置 itemDelegate() 为您自己的 delegate。
下面是一个简单的示例代码,可以实现在 QListView 中编辑文本:
```cpp
class MyItemDelegate : public QStyledItemDelegate
{
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
QLineEdit *editor = new QLineEdit(parent);
return editor;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const override
{
QString text = index.model()->data(index, Qt::EditRole).toString();
QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
lineEdit->setText(text);
}
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
{
QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
QString text = lineEdit->text();
model->setData(index, text, Qt::EditRole);
}
};
// ...
QListView *listView = new QListView;
listView->setModel(model); // model 是您的数据模型
listView->setItemDelegate(new MyItemDelegate);
```
希望能对您有所帮助!