QTableWidget删除行出错

来源:互联网 发布:上海 旗袍 知乎 编辑:程序博客网 时间:2024/05/09 07:46

在调用removeRow删除QTableWidget的行时总会遇到一个问题,说tableWidget已经是isEmpty(),不能再删除了,但其实还有一行没删除,可是只要删除那最后的一行就出错.代码大致是这个样子的

 1.这里是删除的代码,感觉应该没有问题的

for (int i = tableRowCount; i >= 0; --i)
{
ui.classfication_table->removeRow(i);
}

2. 前面给table建立了一个信号槽链接

connect(ui.classfication_table, SIGNAL(itemSelectionChanged()), this, SLOT(OnSelectTableRowChanged()));

每次改变所选中的item,都会触发这个槽函数

3. 槽函数

void MakeTemplate::OnSelectTableRowChanged()
{
QList<QTableWidgetItem*> items = ui.classfication_table->selectedItems();
QTableWidgetItem *item = items.first();
item.......
}

后来我发现,每次我在执行removeRow()进行删除后,如果删除的中的item在删除前是选中状态,当删除这一行后,会执行OnSelectTableRowChanged这个槽函数.并且将这个item上一行的item重新作为选中状态.当我执行完remove最后一行后,此时table已经没有item了,也没有行,但是仍然执行这个函数,但是items已经是空的了,所以在向下执行的时候会出错

解决方法就是在进入这个函数的时候添加一个判断,看table是否为空,或items是否为空.

原创粉丝点击