Ошибка QTableView::edit( const QModelIndex &index)

Я пытаюсь запретить пользователю вводить те же данные в мою модель, которая является подклассом из QAbstractTableModel.

bool MyModel::setData( const QModelIndex &index, const QVariant &value, int role )
{
    bool result = false;
    ...
    // Test if my model already has the same data
    result = findItem( value.toString() ) != -1;
    ...
    if ( result )
        emit( dataChanged( index, index );
    else
        emit ( dataInvalid( index ) );

    return result;
}

Теперь я должен поймать сигнал и вернуть мой табличный вид (тип QTableView) обратно в состояние редактирования:

void MyWindow::dataInvalid( const QModelIndex &index )
{
    myTableView->edit( index );
}

Но когда я запускаю свое приложение, я получаю сообщение в консоли, и QTableView не переходит в состояние редактирования:

edit: edit failed

Что я делаю неправильно? Заранее большое спасибо.

1 ответ

При звонке

myTableView->edit( index )

мой взгляд все еще находится в QAbstractItemView::EditState, и это является причиной сбоя. Решение заключается в добавлении Qt::QueuedConnection при подключении к сигналу:

MyWindow::MyWindow()
{
    ...
    connect( myModel, SIGNAL( dataInvalid( QModelIndex ) ),
        this, SLOT( dataInvalid( QModelIndex ) ), Qt::QueuedConnection );
    ...
}

Теперь все работает отлично.

Другие вопросы по тегам