如何编辑QTableView

时间:2012-01-09 21:34:43

标签: c++ model-view-controller qt4

我目前正在尝试为从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();
  }

1 个答案:

答案 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