我有这个类:
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:文件/usr/include/qt4/QtCore/qlist.h中第282行的"!isEmpty()"
我还尝试了其他技巧:重新实现showEvent方法并从该上下文调用clearSelection,但没有帮助:(
我的Qt版本是4.8.1。任何帮助都会很好。提前谢谢。
嗯。。。这是一个非常愚蠢的错误。正如vahancho所说,这意味着一个递归调用。为了跳过第二次(递归)调用,我不得不在select函数中添加一行。
if( selected.indexes( ).empty( ) ) return;
这是我的一个大错误,但也许它也帮助了其他人。