3

我有这堂课:

class MyWidget : public QWidget {
Q_OBJECT
public:
...
public slot:
void select( const QItemSelection& selected, const QItemSelection& deselected);
private:
QTableView* view;
MyModelClass* model;
}

在我的 cunstructor 中:

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
}

它编译得恰到好处,但是当我运行并进行选择时,它最后会崩溃并显示以下错误消息:

断言:文件 /usr/include/qt4/QtCore/qlist.h 中的“!isEmpty()”,第 282 行

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

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

4

1 回答 1

3

嗯……这是一个非常愚蠢的错误。正如 vahancho 所说,它暗示了一个递归调用。我必须在我的选择函数中添加一行以跳过第二个(递归)调用。

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

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

于 2013-12-03T15:14:10.953 回答