我想在用户编辑行之前检查QListView
中一行的文本。如果它不符合模式,我不想接受它。
目前我有一个QListView
和QStandardItemModel
。我可以通过QStandardItemModel
轻松地添加和删除项目。我还设置了列表视图的模型。
列表或模型中是否有delegates
或event
函数可供编辑?
发布于 2013-08-27 08:55:43
您可以从data()
重载QStandardItemModel
和setData()
函数,然后当用户试图编辑项目时,会用Qt::EditRole
调用setData
,然后在那里进行处理。
http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#setData
发布于 2013-08-27 08:26:47
如果我正确理解了您的意思,您希望在用户尝试进入编辑模式时检查项的值吗?
使用委托应该可以很好地解决这个问题:
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());
https://stackoverflow.com/questions/18470445
复制