2

我想从 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 位

4

2 回答 2

3

血是对的:

也许是因为您在同一行中选择了多个项目,然后当您删除行并尝试访问该行中的下一个元素时。

因此,请改用此代码:

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();
}
于 2013-03-03T19:47:06.960 回答
0

只需在 debig 模式下运行,看看你的程序在哪里失败。例如,在您的循环之前,您可以检查是否items不是空列表,等等(您可以qDebug() << list;在循环之前进行)。

还有一个建议,最好使用items.at(i)insted of items[i]

于 2013-03-03T18:45:32.740 回答