В настоящее время я пытаюсь добавить функциональность редактирования в класс, полученный из QTableView
.Я добавил пользовательский делегат, который должен обеспечивать функциональность редактирования.Однако, если я сделаю простой qDebug() << "FieldDelegate::createEditor()";
в начале делегата, я могу видеть, что эта функция никогда не вызывается.Я попытался взглянуть на примеры в документации по Qt4 и в книге «Программирование на C ++ Gui с использованием QT4», но все, что я смог найти, это примеры для делегатов с 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();
}