要实现在QListView中点击的元素不可编辑,你可以使用自定义代理模型(QStyledItemDelegate)来控制每个项的编辑行为。下面是一个简单的示例代码:
#include <QApplication>
#include <QListView>
#include <QStringListModel>
#include <QStyledItemDelegate>
class CustomDelegate : public QStyledItemDelegate {
public:
explicit CustomDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
// 禁止创建编辑器
return nullptr;
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QStringListModel model;
model.setStringList({"Apple", "Banana", "Cherry", "Durian"});
QListView listView;
listView.setModel(&model);
CustomDelegate delegate;
listView.setItemDelegate(&delegate);
listView.show();
return app.exec();
}
在这个示例中,我们创建了一个继承自QStyledItemDelegate的自定义代理类CustomDelegate。通过重写createEditor()方法,并返回nullptr,我们阻止了对每个项的编辑器的创建。然后将该自定义代理设置给QListView中的setItemDelegate()方法。
这样,在运行程序时,你就会发现点击列表视图中的元素时无法进行编辑操作。
内容由零声教学AI助手提供,问题来源于学员提问