#include "recordxijun.h" #include "ui_recordxijun.h" #include 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() <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()<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 ¤t, 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(); }