У меня есть этот класс:
class MyWidget : public QWidget {
Q_OBJECT
public:
...
public slot:
void select( const QItemSelection& selected, const QItemSelection& deselected);
private:
QTableView* view;
MyModelClass* model;
}
В моем конструкторе:
view->setEditTriggers( QAbstractItemView::NoEditTriggers );
view->setSelectionMode( QAbstractItemView::SelectionMode::SingleSelection );
view->setSelectionBehavior( QAbstractItemView::SelectionBehavior::SelectRows );
connect( view->selectionModel( ), SIGNAL( selectionChanged ( const QItemSelection&, const QItemSelection& ) ), this, SLOT( select( const QItemSelection&, const QItemSelection& ) ) );
// and few other things
В моем слоте реализации:
void MyWidget::select( const QItemSelection& selected, const QItemSelection& deselected ) {
//... doing few things
// at the end:
view->clearSelection();
// tried view->selectionModel()->clear() and view->selectionModel()->clearSelection() too
// but got the same result
}
Он правильно компилируется, но когда я запускаю и делаю выделение, в конце он вылетает с таким сообщением об ошибке:
ASSERT: «! IsEmpty ()» в файле /usr/include/qt4/QtCore/qlist.h, строка 282
Я пробовал и другие трюки:
Переопределение метода showEvent и вызов clearSelection из этого контекста, но это не помогло 🙁
Моя версия Qt 4.8.1. Любая помощь будет хорошей. Заранее спасибо.
Ну … это была довольно глупая ошибка. Как сказал Ваанчо, это подразумевает рекурсивный вызов. Мне пришлось добавить строку в мою функцию выбора, чтобы пропустить второй (рекурсивный) вызов.
if( selected.indexes( ).empty( ) ) return;
Это была моя большая ошибка, но, возможно, это поможет и другим.
Других решений пока нет …