linux - QTableWidget 在删除多行时崩溃

标签 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 位

最佳答案

血是对的:

Mayby it's because you choose multiple items in the same row and then when you delete row and try to access next element in that row.

所以请使用此代码:

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();
}

关于linux - QTableWidget 在删除多行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178730/

相关文章:

qt - bytesAvailable() 返回值但 waitForReadyRead() 返回 false 为什么?

c++ - 如何在主函数中连接到数据库,然后从其他函数中引用它

linux - 在 Bash 中,为什么 `x=100 echo $x` 不打印任何内容?

linux - Bash - 从字符串中提取日期并重新格式化

linux - 如何在另一台安装了qt的计算机(linux)上运行qt程序?

python - 如何断开函数与 QAction 的连接?

c++ - 如何在 QT 中将 Widget 放入另一个 widget 中?

php项目在windows上工作但在linux上不工作

c++ - 从 QT 中的 C++ 代码访问 QML 元素

c++ - 将当前 QWidget 替换为 QMainWindow 中的另一个 QWidget