QTableWidget在删除多行时崩溃

时间:2013-03-02 19:53:09

标签: linux qt qt4

我想从QTableWidget(三列)中删除多行,这是我的代码:

void on_del_clicked()
{
    QList<QTableWidgetItem *> items = ui->tableWidget->selectedItems();
    for(int i = 0;i<items.length(); i=i+3)
    {
        int row = items[i]->row();
        if(row>=0)
        {
            ui->tableWidget->removeRow(row);
            ui->tableWidget->setCurrentIndex(ui->tableWidget->model()->index(row,0));
        }
    }
}

如果我使用Ctrl选择多行,它可以正常工作,但如果我通过拖动鼠标选择多个条目,它会崩溃。只有当所选项目为3的倍数并且通过拖动鼠标选择行时,它才会崩溃。我使用Qt 4.8.4,我的操作系统是Ubuntu 12.10 64位

2 个答案:

答案 0 :(得分:2)

鲜血是对的:

  

Mayby,因为你在同一行中选择多个项目然后   删除行并尝试访问该行中的下一个元素时。

所以请改用此代码:

QList<QTableWidgetItem*> selected_rows = ui->tableWidget->selectedItems();
while( !selected_rows.isEmpty() )
{
    QTableWidgetItem *itm = selected_rows.at(0);
    ui->tableWidget->removeRow(itm->row());
    selected_rows = ui->tableWidget->selectedItems();
}

答案 1 :(得分:0)

只需在debig模式下运行,然后查看程序失败的位置。 例如,在您的周期之前,您可以检查items是否不是空列表,或者等等(您可以在周期之前qDebug() << list;)。

还有一条建议,最好使用items.at(i) items[i] {。}}。{/ p>