Ошибка 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 );
...
}
Теперь все работает отлично.