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

202 lines
5.8 KiB
C++

#include "recordxijun.h"
#include "ui_recordxijun.h"
#include <QFileDialog>
recordxijun::recordxijun(QWidget *parent) :
QWidget(parent),
ui(new Ui::recordxijun)
{
ui->setupUi(this);
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("xijun");//打开数据库中名为“”的表
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
theSelection=new QItemSelectionModel(model);//关联选择模型
//theSelection当前项变化时触发currentChanged信号
connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));
ui->tableView->setSelectionModel(theSelection); //设置选择模型
shuaxin();
//创建界面组件与数据模型的字段之间的数据映射
dataMapper= new QDataWidgetMapper();
dataMapper->setModel(model);//设置数据模型
dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
m_maxtu=new maxtu;
connect(this, SIGNAL(yuan(QPixmap)),m_maxtu, SLOT(getyuan(QPixmap)));
ui->pushButton->setFixedSize(150,50);
ui->pushButton_2->setFixedSize(150,50);
ui->pushButton_4->setFixedSize(150,50);
ui->pushButton_5->setFixedSize(150,50);
ui->lineEdit->setFixedSize(300,50);
ui->lineEdit_2->setFixedSize(300,50);
}
recordxijun::~recordxijun()
{
delete ui;
}
//刷新字段
void recordxijun::shuaxin()
{
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,"计数");
for (int i=0;i<=model->rowCount() ;i++ ) {
ui->tableView->setRowHeight(i,80);
}
for (int i=0;i<=model->columnCount() ;i++ ) {
ui->tableView->setColumnWidth(i,350);
}
}
void recordxijun::on_pushButton_clicked()
{
QString number=ui->lineEdit_2->text();
QSqlQuery query;
QString str=QString("SELECT * FROM xijun 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,"计数");
} else {
qDebug() << "Query failed:" << query.lastError().text();
}
}
//导出
void recordxijun::on_pushButton_2_clicked()
{
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)");
qDebug()<<filePath;
QFile file(filePath);
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.";
}
//刷新
void recordxijun::on_pushButton_4_clicked()
{
model->setTable("xijun");//打开数据库中名为“”的表
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
shuaxin();
}
void recordxijun::on_currentChanged(const QModelIndex &current, const QModelIndex &previous)
{
Q_UNUSED(previous);
dataMapper->setCurrentIndex(current.row()); //更细数据映射的行号
int curRecNo=current.row();//获取行号
QSqlRecord curRec=model->record(curRecNo); //获取当前记录
if(current.column()==2){
QByteArray data=curRec.value("yuanshi").toByteArray();
QPixmap pic;
pic.loadFromData(data);
emit yuan(pic);
m_maxtu->setWindowModality(Qt::ApplicationModal);
m_maxtu->show();
}
if(current.column()==3){
QByteArray data2=curRec.value("jieguo").toByteArray();
QPixmap pic2;
pic2.loadFromData(data2);
emit yuan(pic2);
m_maxtu->setWindowModality(Qt::ApplicationModal);
m_maxtu->show();
}
}
//删除
void recordxijun::on_pushButton_5_clicked()
{
model->removeRow(ui->tableView->currentIndex().row());
model->submitAll();
model->setTable("xijun");//打开数据库中名为“”的表
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
shuaxin();
}
void recordxijun::on_pushButton_6_clicked()
{
emit fanhui();
}