drug_sensitivity_reaction/historicalrecords.cpp
jianbin.chang常健彬 ce734d1af1 厂家提供原始代码
2025-07-17 08:39:15 +08:00

286 lines
11 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "historicalrecords.h"
#include "ui_historicalrecords.h"
#include<QMessageBox>
#include<QFileDialog>
#include<QAxObject>
#include<QStandardItemModel>
historicalrecords::historicalrecords(QWidget *parent)
: QWidget(parent)
, ui(new Ui::historicalrecords)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint); // 隐藏标题栏
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setAlternatingRowColors(true);
model = new QSqlTableModel(this);
model->setTable("testing");//打开数据库中名为“”的表
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
model->setHeaderData(0,Qt::Horizontal,"记录");
model->setHeaderData(1,Qt::Horizontal,"操作类型");
model->setHeaderData(3,Qt::Horizontal,"样品名称");
model->setHeaderData(2,Qt::Horizontal,"细菌/病毒");
model->setHeaderData(4,Qt::Horizontal,"采集地点");
model->setHeaderData(5,Qt::Horizontal,"采集时间");
model->setHeaderData(6,Qt::Horizontal,"水样类型");
model->setHeaderData(7,Qt::Horizontal,"进样量");
model->setHeaderData(8,Qt::Horizontal,"洗脱时间");
model->setHeaderData(9,Qt::Horizontal,"开始时间");
model->setHeaderData(10,Qt::Horizontal,"结束时间");
ui->pushButton->setFixedSize(150,50);
ui->pushButton_2->setFixedSize(150,50);
ui->pushButton_4->setFixedSize(150,50);
ui->pushButton_3->setFixedSize(150,50);
ui->lineEdit->setFixedSize(300,50);
ui->lineEdit_2->setFixedSize(300,50);
ui->widget->setFixedHeight(60);
}
historicalrecords::~historicalrecords()
{
delete ui;
}
//查询
void historicalrecords::on_pushButton_clicked()
{
QString number=ui->lineEdit->text();
QSqlQuery query;
QString str=QString("samplename = '%1'").arg(number);
qDebug() <<str;
model->setFilter(str);
model->select();
model->setHeaderData(0,Qt::Horizontal,"记录");
model->setHeaderData(1,Qt::Horizontal,"操作类型");
model->setHeaderData(3,Qt::Horizontal,"样品名称");
model->setHeaderData(2,Qt::Horizontal,"细菌/病毒");
model->setHeaderData(4,Qt::Horizontal,"采集地点");
model->setHeaderData(5,Qt::Horizontal,"采集时间");
model->setHeaderData(6,Qt::Horizontal,"水样类型");
model->setHeaderData(7,Qt::Horizontal,"进样量");
model->setHeaderData(8,Qt::Horizontal,"洗脱时间");
model->setHeaderData(9,Qt::Horizontal,"开始时间");
model->setHeaderData(10,Qt::Horizontal,"结束时间");
}
void historicalrecords::exportTableViewToExcel(QTableView* tableView) {
// 创建Excel应用程序对象
QAxObject* excel = new QAxObject("Excel.Application", nullptr);
if (!excel) {
QMessageBox::warning(nullptr, "Error", "Could not create Excel application object.");
return;
}
// 显示Excel应用程序可选
excel->setProperty("Visible", true);
// 获取工作簿对象
QAxObject* workbooks = excel->querySubObject("Workbooks");
QAxObject* workbook = workbooks->querySubObject("Add()");
// 获取工作表对象
QAxObject* worksheet = workbook->querySubObject("Worksheets(1)");
// 获取QTableView的模型
QAbstractItemModel* model = tableView->model();
if (!model) {
QMessageBox::warning(nullptr, "Error", "No model associated with the table view.");
delete excel;
return;
}
int rowCount = model->rowCount();
int columnCount = model->columnCount();
// 将模型数据写入Excel工作表
for (int row = 2; row <= rowCount; ++row) { // Excel的行和列是从1开始的
for (int column = 1; column <= columnCount; ++column) {
QModelIndex index = model->index(row - 1, column - 1); // Qt的行和列是从0开始的
QVariant value = model->data(index);
QAxObject* cell = worksheet->querySubObject("Cells(int,int)", row, column);
cell->setProperty("Value", value.toString());
}
}
model->setHeaderData(0,Qt::Horizontal,"记录");
model->setHeaderData(1,Qt::Horizontal,"操作类型");
model->setHeaderData(3,Qt::Horizontal,"样品名称");
model->setHeaderData(2,Qt::Horizontal,"细菌/病毒");
model->setHeaderData(4,Qt::Horizontal,"采集地点");
model->setHeaderData(5,Qt::Horizontal,"采集时间");
model->setHeaderData(6,Qt::Horizontal,"水样类型");
model->setHeaderData(7,Qt::Horizontal,"进样量");
model->setHeaderData(8,Qt::Horizontal,"洗脱时间");
model->setHeaderData(9,Qt::Horizontal,"开始时间");
model->setHeaderData(10,Qt::Horizontal,"结束时间");
QAxObject* cell1 = worksheet->querySubObject("Cells(int,int)",1, 1);
cell1->setProperty("Value", "记录");
QAxObject* cell3 = worksheet->querySubObject("Cells(int,int)",1, 2);
cell3->setProperty("Value", "样品名称");
QAxObject* cell4 = worksheet->querySubObject("Cells(int,int)",1, 3);
cell4->setProperty("Value", "采集地点");
QAxObject* cell5 = worksheet->querySubObject("Cells(int,int)",1, 4);
cell5->setProperty("Value", "采集时间");
QAxObject* cell6 = worksheet->querySubObject("Cells(int,int)",1, 5);
cell6->setProperty("Value", "水样类型");
QAxObject* cell7 = worksheet->querySubObject("Cells(int,int)",1, 6);
cell7->setProperty("Value", "操作类型");
QAxObject* cell8 = worksheet->querySubObject("Cells(int,int)",1, 7);
cell8->setProperty("Value", "进样量");
QAxObject* cell9 = worksheet->querySubObject("Cells(int,int)",1, 8);
cell9->setProperty("Value", "洗脱时间");
QAxObject* cell10 = worksheet->querySubObject("Cells(int,int)",1, 9);
cell10->setProperty("Value", "开始时间");
QAxObject* cell11 = worksheet->querySubObject("Cells(int,int)",1, 10);
cell11->setProperty("Value", "结束时间");
QAxObject* cell2 = worksheet->querySubObject("Cells(int,int)",1, 11);
cell2->setProperty("Value", "操作类型");
}
//导出
void historicalrecords::on_pushButton_2_clicked()
{
// exportTableViewToExcel( ui->tableView);
// QString desktopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
// QString filePath = QDir(desktopPath).filePath("mydata.csv");
// QString fileName = QFileDialog::getSaveFileName();
exportTableViewToCsv("");
}
void historicalrecords::exportTableViewToCsv(const QString &filePat)
{
QAbstractItemModel *model = ui->tableView->model();
if (!model) {
qDebug() << "No model set on the table view.";
return;
}
QString filePath = QFileDialog::getSaveFileName(this, "Export to CSV", "", "CSV Files (*.csv)");
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "Could not open file for writing:" << file.errorString();
return;
}
QTextStream out(&file);
// QFile file(QFileDialog::getSaveFileName());
// if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
// qDebug() << "Could not open file for writing:" << file.errorString();
// return;
// }
// QTextStream out(&file);
// 写入表头(可选)
int columnCount = model->columnCount();
for (int col = 0; col < columnCount; ++col) {
out << model->headerData(col, Qt::Horizontal, Qt::DisplayRole).toString();
if (col < columnCount - 1) {
out << ",";
}
}
out << "\n";
// 写入数据行
int rowCount = model->rowCount();
for (int row = 0; row < rowCount; ++row) {
for (int col = 0; col < columnCount; ++col) {
QVariant data = model->data(model->index(row, col), Qt::DisplayRole);
out << data.toString().replace(",", ";"); // 替换逗号以避免CSV格式问题
if (col < columnCount - 1) {
out << ",";
}
}
out << "\n";
}
file.close();
qDebug() << "Data exported to CSV successfully.";
}
QString historicalrecords::getDesktopPath()
{
return QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
}
//刷新
void historicalrecords::on_pushButton_3_clicked()
{
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setAlternatingRowColors(true);
// model = new QSqlQueryModel;
model = new QSqlTableModel(this);
model->setTable("testing");//打开数据库中名为“”的表
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
model->setHeaderData(0,Qt::Horizontal,"记录");
model->setHeaderData(1,Qt::Horizontal,"操作类型");
model->setHeaderData(3,Qt::Horizontal,"样品名称");
model->setHeaderData(2,Qt::Horizontal,"细菌/病毒");
model->setHeaderData(4,Qt::Horizontal,"采集地点");
model->setHeaderData(5,Qt::Horizontal,"采集时间");
model->setHeaderData(6,Qt::Horizontal,"水样类型");
model->setHeaderData(7,Qt::Horizontal,"进样量");
model->setHeaderData(8,Qt::Horizontal,"洗脱时间");
model->setHeaderData(9,Qt::Horizontal,"开始时间");
model->setHeaderData(10,Qt::Horizontal,"结束时间");
}
//查询
void historicalrecords::on_pushButton_4_clicked()
{
QString number=ui->lineEdit_2->text();
QSqlQuery query;
QString str=QString("SELECT * FROM testing WHERE time like '%%1%'").arg(number);
qDebug() <<str;
query.prepare(str);
if (query.exec()) { // 确保查询执行成功
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery(query); // 先设置查询,这样模型就会包含查询结果
ui->tableView->setModel(model);
ui->tableView->show(); // 显示视图,此时视图将显示查询结果
model->setHeaderData(0,Qt::Horizontal,"记录");
model->setHeaderData(1,Qt::Horizontal,"操作类型");
model->setHeaderData(3,Qt::Horizontal,"样品名称");
model->setHeaderData(2,Qt::Horizontal,"细菌/病毒");
model->setHeaderData(4,Qt::Horizontal,"采集地点");
model->setHeaderData(5,Qt::Horizontal,"采集时间");
model->setHeaderData(6,Qt::Horizontal,"水样类型");
model->setHeaderData(7,Qt::Horizontal,"进样量");
model->setHeaderData(8,Qt::Horizontal,"洗脱时间");
model->setHeaderData(9,Qt::Horizontal,"开始时间");
model->setHeaderData(10,Qt::Horizontal,"结束时间");
} else {
qDebug() << "Query failed:" << query.lastError().text();
}
}