我目前正在尝试为从QTableView
派生的类添加编辑功能。我添加了一个应该提供编辑功能的自定义委托。但是,如果我在委托的开头做一个简单的qDebug() << "FieldDelegate::createEditor()";
,我可以看到这个函数永远不会被调用。我试着查看Qt4文档和“使用QT4进行C ++ Gui编程”一书中的示例,但我能找到的只是代表QTableWidgets
而不是QTableViews
的代表的示例。但是在我的情况下,我需要一个自定义数据模型,所以我不想复制QTableWidgetItems
中的任何数据。
到目前为止,我做了以下事情:
QAbstractItemModel::setItemDelegate()
setEditTriggers( QAbstractItemView::DoubleClicked )
当我双击某个项目时,此设置中没有任何反应。根本没有调用FieldDelegate::createEditor()
。
我还尝试将doubleClicked()
信号从QAbstractItemView
连接到同一个班级的edit()
广告位,但这只会在我双击时给我edit: editing failed
消息在一个牢房里。
到目前为止,我没有从Qt::EditRole
方法返回除DatabaseModel::data()
以外的任何其他角色。这将类似于最后一种情况,我想在表格底部添加一个空行,用于添加新数据。这会导致问题吗?
以下是构建视图的代码:
DocumentChoiceView::DocumentChoiceView( DatabaseModel * model,
QWidget * parent ) :
QTableView( parent ),
m_model( model )
{
setShowGrid ( false );
setModel( m_model );
setItemDelegate( m_model->delegate().get() );
setEditTriggers( QAbstractItemView::DoubleClicked );
connect( this, SIGNAL(doubleClicked(const QModelIndex&)),
this, SLOT(edit(const QModelIndex&)) );
verticalHeader()->hide();
}
答案 0 :(得分:4)
要使模型可编辑,需要返回编辑标志。
//Reimplement
Qt::ItemFlag QAbstractItemModel::flags ( const QModelIndex & index ) const;
//and add
Qt::ItemIsEditable
//to the returned value
http://doc.qt.io/qt-4.8/model-view-programming.html#making-the-model-editable