Добрый день, создал программу которая забирает данные из БД и выводит их в 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();
}
}
Ответ
Задача решена:
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());
Комментариев нет:
Отправить комментарий