我有这个课:

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
}

它编译正确,但是当我运行并进行选择时,它最终由于以下错误消息而崩溃:



我也尝试了其他技巧:
重新实现showEvent方法并从该上下文中调用clearSelection,但没有帮助:(

我的Qt版本是4.8.1。你能帮忙的话,我会很高兴。提前致谢。

最佳答案

好吧...这是一个非常愚蠢的错误。正如vahancho所说,这意味着递归调用。我必须在选择函数中添加一行以跳过第二个(递归)调用。

if( selected.indexes( ).empty( ) ) return;

这是我的大失误,但也许对其他人也有帮助。

关于c++ - QTableView clearSelection失败并显示ASSERT:文件/usr/include/qt4/QtCore/qlist.h,282行中的 “!isEmpty()”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20353054/

10-13 08:27