gpt4 book ai didi

c++ - 如何编辑 QTableView

转载 作者:行者123 更新时间:2023-11-30 02:06:23 25 4
gpt4 key购买 nike

我目前正在尝试向派生自 QTableView 的类添加编辑功能.我添加了一个应该提供编辑功能的自定义委托(delegate)。但是,如果我做一个简单的 qDebug() << "FieldDelegate::createEditor()";在委托(delegate)的开头,我可以看到这个函数永远不会被调用。我试图查看 Qt4 文档和“C++ Gui Programming with QT4”一书中的示例,但我能找到的只是代表使用 QTableWidgets 的示例而不是 QTableViews .但是在我的例子中,我需要一个自定义数据模型,所以我不想复制 QTableWidgetItems 中的任何数据。 .

到目前为止,我做了以下事情:

  • 我使用 QAbstractItemModel::setItemDelegate() 添加了自定义委托(delegate)
  • 我使用 setEditTriggers( QAbstractItemView::DoubleClicked ) 激活了编辑功能

当我双击一个项目时,此设置中没有任何反应。 FieldDelegate::createEditor()根本没有被调用。

我还尝试连接 doubleClicked()来自 QAbstractItemView 的信号到 edit()同一类的插槽,但这只给我消息 edit: editing failed每当我双击一个单元格时。

到目前为止,除了 Qt::EditRole,我没有返回任何其他角色来自 DatabaseModel::data()方法。这将类似于最后一个案例,我想在表的底部添加一个空行,用于添加新数据。这会导致问题吗?

下面是构建 View 的代码:

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();
}

最佳答案

要使模型可编辑,需要返回编辑标志。

//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

关于c++ - 如何编辑 QTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com