QListView& QStandardItemModel在编辑行之前检查文本

时间:2013-08-27 16:02:56

标签: c++ qt events qlistview qstandarditemmodel

我想在用户编辑之前检查QListView中行的文本。如果它不符合模式,我不想接受它。

目前我有QListViewQStandardItemModel。我可以通过QStandardItemModel轻松添加和删除项目。我还设置了列表视图的模型。

列表或模型上是否有一些delegatesevent个功能可供编辑?

2 个答案:

答案 0 :(得分:3)

您可以从data()重载setData()QStandardItemModel个功能,然后当用户尝试编辑项目时,setData会被Qt::EditRole调用可以做你的处理。

http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#setData

答案 1 :(得分:0)

如果我理解正确,您想在用户尝试进入编辑模式时检查项目的值吗?

使用委托应该可以很好地解决这个问题:

class MyItemDelegate : public QItemDelegate {
    public:
        QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
            if(index.data() == /* do whatever check you want here */) {
                return NULL; // Prevent editing
            }
            return QItemDelegate::createEditor(parent, option, index);
        }
};

listView->setItemDelegate(new MyItemDelegate());