QTableView clearSelect 失败,并显示 ASSERT:在文件 /usr/include/qt4/QtCore/qlist.h 中"!isEmpty()",第 282 行



我有这个类:

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;

这是我的一个大错误,但也许它也帮助了其他人。

相关内容

  • 没有找到相关文章

最新更新