Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Как скопировать данные из tableWidget в tableWidget_1?

#cpp #linux #qt #qtcreator


Добрый день, создал программу которая забирает данные из БД и выводит их в qtableWidget_1
в котором выведенные строки можно отметить с помощью Check Box. Рядом есть qtablewidget_2
куда отмеченные строки нужно скопировать, подскажите как такое можно реализовать ?
Сам код вывода запроса из БД.

void MainWindow::on_pushButton_2_clicked()
{

ui->tableWidget->setColumnCount(5); // Указываем число колонок
ui->tableWidget->setShowGrid(true); // Включаем сетку
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); // Разрешаем
выделение только одного элемента
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);// Разрешаем
выделение построчно
//ui->tableWidget->setHorizontalHeaderLabels(headers);// Устанавливаем заголовки колонок
ui->tableWidget->horizontalHeader()->setStretchLastSection(false);// Растягиваем
последнюю колонку на всё доступное пространство
// ui->tableWidget->hideColumn(0);// Скрываем колонку под номером 0
  ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//Запрещаем
редактировать данные в полях таблицы
// Создаём запрос для для выборки записей из базы данных


QSqlQuery query = QSqlQuery(db);
if (!query.exec("SELECT * FROM mytable"))
{
   QMessageBox::information(this,"Окно информации","Не удалось выполнить запрос возможно
нет соеденеия с базой данных.");
   qDebug() << query.lastError().databaseText();
   qDebug() << query.lastError().driverText();
   return;

}else{

/* Выполняем заполнение QTableWidget записями с помощью цикла
 * */
for(int i = 0; query.next(); i++){

    ui->tableWidget->insertRow(i);// Вставляем строку

    /* Устанавливаем в первую колонку id забирая его из результата SQL-запроса
     * Эта колонка будет скрыта
     * */
    ui->tableWidget->setItem(i,0, new QTableWidgetItem(query.value(0).toString()));


    QTableWidgetItem *item = new QTableWidgetItem();// Создаём элемент, который будет
выполнять роль чекбокса
    item->data(Qt::CheckStateRole);

    /* Проверяем, на статус нечетности, если нечетное устройство, то
     * выставляем состояние чекбокса в Checked, иначе в Unchecked
     * */
    if(query.value(1).toInt() == 1){
        item->setCheckState(Qt::Checked);
    } else {
        item->setCheckState(Qt::Unchecked);
    }

    ui->tableWidget->setItem(i,0, item);// Устанавливаем чекбокс во вторую колонку

    // Забираем все данные из результата запроса и устанавливаем в остальные поля
    ui->tableWidget->setItem(i,1, new QTableWidgetItem(query.value(1).toString()));
    ui->tableWidget->setItem(i,2, new QTableWidgetItem(query.value(2).toString()));
    ui->tableWidget->setItem(i,3, new QTableWidgetItem(query.value(3).toString()));
    ui->tableWidget->setItem(i,4, new QTableWidgetItem(query.value(4).toString()));
    ui->tableWidget->setItem(i,5, new QTableWidgetItem(query.value(5).toString()));


}

ui->tableWidget->resizeColumnsToContents();
db.close();
    }

  }

    


Ответы

Ответ 1



Задача решена: ui->tableWidget_1->setItem(i,1, new QTableWidgetItem(ui->tableWidget->item(i, 1)->text())); как вариант можно использовать так же данную конструкцию ui->tableWidget_1->setItem(i,1, ui->tableWidget->item(i, 1)->clone());

Комментариев нет:

Отправить комментарий