Как редактировать QTableView - PullRequest
       0

Как редактировать QTableView

1 голос
/ 10 января 2012

В настоящее время я пытаюсь добавить функциональность редактирования в класс, полученный из 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();
  }

1 Ответ

4 голосов
/ 12 января 2012

Чтобы модель была редактируемой, необходимо вернуть флаг редактирования.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...