LINUX.ORG.RU

[Qt] При удалении строк вызывается сообщение об ошибке


0

2

Удаляk строки из QTableWidget двумя способами:

1.
ui->tableWidget->setRowCount(0);

2.
for(int i=ui->tableWidget->model()->rowCount()-1; i >= 0; --i)
 ui->tableWidget->removeRow(i);
(Конечно же не всеми способами одновременно)

Если не выделена строка в QTableWidget, то оба способа работают. Если строка/строки выделеы, то программа завершается Runtime error (clearSelection тоже вызывает Runtime error).

Как еще можно удалить строки? П.С. Создаю строки через

ui->tableWidget->setItem(...)


эмм, а там разве не из модели надо удалять?

TERRANZ ★★★★ ()

А selectionModel никак не используешь?

panter_dsd ★★★★ ()

Создание строк:

for (ptrdiff_t i=0; i<desValue1; i++) {

    table->setRowCount(i+1);

    for (ptrdiff_t j=0; j<table->columnCount(); j++) {

        table->setItem(i, j, new QTableWidgetItem(""));
    }
}

Удаление строк:

table->setRowCount(desValue2);

pa23 ()
Ответ на: комментарий от pa23

> table->setRowCount(desValue2);

А если я хочу удалить первую строку?

anonymous ()
Ответ на: комментарий от TERRANZ

Попробовал в модели удалить:

ui->tableWidget->model()->removeRows(0,ui->tableWidget->model()->rowCount()-1);
Выходит тот же Runtime error

Skala ()
Ответ на: комментарий от panter_dsd

Использую обработчик сигнала:

void MainWindow::on_tableWidget_itemSelectionChanged
Skala ()
Ответ на: комментарий от Skala

В смысле: Выходит, только если выделены строки(строка).

Skala ()
Ответ на: комментарий от panter_dsd
void MainWindow::on_tableWidget_itemSelectionChanged(  ){
    int iRow=ui->tableWidget->selectedItems().at(0)->row();
    int iIDItem=ui->tableWidget->model()->data(ui->tableWidget->model()->index(iRow,0)).toInt();
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("QRSSRead.db");
    db.open();
    QSqlQuery query (QString("SELECT description, link FROM rssmess WHERE id=%1").arg(iIDItem));
    query.first();
    ui->textBrowser->setHtml(QString("%1<hr/><a href='%2'>%2</a>").arg(query.value(0).toString()).arg(query.value(1).toString()));
    // Set as readed
    query.prepare("UPDATE rssmess SET readed=1 WHERE id=:id");
    query.bindValue(0, iIDItem);
    query.exec();
    db.close();
    QFont fBold=fHeaders;
    fBold.setBold(false);
    ui->tableWidget->selectedItems().at(0)->setFont(fBold);
    ui->tableWidget->item(ui->tableWidget->selectedItems().at(0)->row(),1)->setFont(fBold);
    ui->tableWidget->item(ui->tableWidget->selectedItems().at(0)->row(),2)->setFont(fBold);
}
Skala ()
Ответ на: комментарий от Skala

Skala> ui->tableWidget->selectedItems().at(0)->row()
Skala> at(0)

Сам догадаешься или разжевать?

panter_dsd ★★★★ ()
Ответ на: комментарий от panter_dsd

Я хотел взять первый элемент из выбранных строк, изменить у него жирность шрифта.

Поэтому лучше разжевать..

Skala ()
Ответ на: комментарий от panter_dsd

Спасибо!
Мне все интересно- как это работает? Почему именно так, если всегда вызывался этот обработчик и без такой проверки?

Skala ()
Ответ на: комментарий от Skala

Дык селекшена нет, а ты пытаешься его использовать. Вот и огребаешь выход за границы массива.

panter_dsd ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.