我目前正在嘗試將編輯功能添加到派生自QTableView
的類。我添加了一個應該提供編輯功能的自定義委託。但是,如果我在代表的開頭做了一個簡單的qDebug() << "FieldDelegate::createEditor()";
,我可以看到這個函數永遠不會被調用。我試圖看看Qt4文檔中的示例以及「C ++ Gui使用QT4編程」一書中的示例,但我所能找到的僅僅是QTableWidgets
代表的示例,而不是QTableViews
。但在我的情況下,我需要一個自定義數據模型,所以我不想複製QTableWidgetItems
中的任何數據。如何編輯QTableView
到目前爲止,我做了以下內容:
- 我添加使用
QAbstractItemModel::setItemDelegate()
- 我使用
setEditTriggers(QAbstractItemView::DoubleClicked)
當我雙擊一個項目什麼也沒有發生在這個激活的編輯功能的自定義委託建立。 FieldDelegate::createEditor()
根本不被調用。
我也試過doubleClicked()
信號從QAbstractItemView
連接到同一類的edit()
插槽,但每當我雙擊單元格這只是給我的消息edit: editing failed
。
到目前爲止,我不會從DatabaseModel::data()
方法中返回除Qt::EditRole
之外的其他任何角色。這與最後一種情況類似,我想在表格的底部添加一個空行,用於添加新數據。這會導致問題嗎?
下面是查看施工代碼:
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();
}
你從模型返回相應的標誌? http://doc.qt.nokia.com/4.7-snapshot/model-view-programming.html#making-the-model-editable – 2012-01-09 22:29:55
@KimBowlesSørhus:是的,這似乎是問題所在。我想我主要關注的是教程,而對於實際的文檔還不夠。現在一切正常。如果您將此作爲答案,我會接受它。 – LiKao 2012-01-10 07:25:31