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