2

QTableWidgetから複数の行(3列)を削除したいのですが、これは私のコードです:

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を使用しており、OSはUbuntu12.1064ビットです。

4

2 に答える 2

3

Blood is right :

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.

So use this code instead :

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

Just run in debig mode, and see, where your program fails. For example, before your cycle you can check if items are not empty list, or so on (you may do qDebug() << list; before cycle).

One more advice, better to use items.at(i) insted of items[i].

于 2013-03-03T18:45:32.740 に答える