3097 lines
105 KiB
C++
3097 lines
105 KiB
C++
#include <Python.h>
|
||
#include "micjishu.h"
|
||
#include "ui_micjishu.h"
|
||
#include<QMessageBox>
|
||
#include<QScrollBar>
|
||
#include<QGraphicsDropShadowEffect>
|
||
#include <QtConcurrent/QtConcurrent>
|
||
QString id6;
|
||
// extern QString xiangcheng;
|
||
// extern QString shenghao;
|
||
// int x;
|
||
// int y;
|
||
QString savelujing2;
|
||
QSqlDatabase dbmic;
|
||
micjishu::micjishu(QWidget *parent) :
|
||
QWidget(parent),
|
||
ui(new Ui::micjishu)
|
||
{
|
||
|
||
ui->setupUi(this);
|
||
getshui();
|
||
m_michistoricalrecords=new michistoricalrecords;
|
||
m_ziwai=new ziwai;
|
||
connect( m_michistoricalrecords, &michistoricalrecords::fanhui, this, [=](){this->showMaximized();m_michistoricalrecords->hide();});
|
||
ui->tableWidget->setRowCount(10);
|
||
ui->tableWidget->setColumnCount(10);
|
||
|
||
for (int i=0;i<=ui->tableWidget->rowCount() ;i++ ) {
|
||
ui->tableWidget->setRowHeight(i,35);
|
||
|
||
}
|
||
|
||
ui->tableWidget->setColumnWidth(0,45);
|
||
ui->tableWidget->setColumnWidth(1,127);
|
||
ui->tableWidget->setColumnWidth(2,127);
|
||
ui->tableWidget->setColumnWidth(3,127);
|
||
ui->tableWidget->setColumnWidth(4,48);
|
||
ui->tableWidget->setColumnWidth(5,43);
|
||
ui->tableWidget->setColumnWidth(6,68);
|
||
ui->tableWidget->setColumnWidth(7,43);
|
||
ui->tableWidget->setColumnWidth(8,43);
|
||
ui->tableWidget->setColumnWidth(9,73);
|
||
|
||
ui->tableWidget_2->setRowCount(10);
|
||
ui->tableWidget_2->setColumnCount(10);
|
||
for (int i=0;i<=ui->tableWidget_2->rowCount() ;i++ ) {
|
||
ui->tableWidget_2->setRowHeight(i,35);
|
||
|
||
}
|
||
ui->tableWidget_2->setColumnWidth(0,45);
|
||
ui->tableWidget_2->setColumnWidth(1,127);
|
||
ui->tableWidget_2->setColumnWidth(2,127);
|
||
ui->tableWidget_2->setColumnWidth(3,127);
|
||
ui->tableWidget_2->setColumnWidth(4,53);
|
||
ui->tableWidget_2->setColumnWidth(5,48);
|
||
ui->tableWidget_2->setColumnWidth(6,48);
|
||
ui->tableWidget_2->setColumnWidth(7,48);
|
||
ui->tableWidget_2->setColumnWidth(8,48);
|
||
ui->tableWidget_2->setColumnWidth(9,73);
|
||
|
||
|
||
|
||
|
||
ui->tableWidget->setHorizontalHeaderLabels(headers);
|
||
|
||
for (int row = 0; row < 10; ++row) { QTableWidgetItem *item = new QTableWidgetItem(xuhao.at(row));
|
||
ui->tableWidget->setItem(row, 0, item);}
|
||
ui->tableWidget_2->setHorizontalHeaderLabels(headers);
|
||
for (int row = 0; row < 10; ++row) { QTableWidgetItem *item = new QTableWidgetItem(xuhao.at(row));
|
||
ui->tableWidget_2->setItem(row, 0, item);}
|
||
for (int row = 5; row < ui->tableWidget->rowCount(); ++row) {
|
||
ui-> tableWidget->setRowHidden(row, true);
|
||
}
|
||
for (int row = 0; row <5; ++row) {
|
||
ui-> tableWidget_2->setRowHidden(row, true);
|
||
}
|
||
|
||
|
||
|
||
m_zidingyi=new zidingyi;
|
||
|
||
|
||
ui->pushButton_5->setHidden(true);
|
||
|
||
ui->widget->setFixedSize(745,520);
|
||
|
||
ui->label_5->setFixedSize(745,520);
|
||
ui->label_6->setFixedSize(745,520);
|
||
|
||
ui->tableWidget_3->setFixedSize(170,800);
|
||
ui->tableWidget_2->setFixedSize(745,210);
|
||
ui->tableWidget->setFixedSize(745,210);
|
||
ui->pushButton->setFixedSize(120,35);
|
||
ui->pushButton_2->setFixedSize(92,35);
|
||
ui->pushButton_5->setFixedSize(92,35);
|
||
ui->pushButton_9->setFixedSize(92,35);
|
||
ui->pushButton_10->setFixedSize(92,35);
|
||
|
||
ui->tableWidget_2->horizontalHeader()->setFixedHeight(40);
|
||
ui->tableWidget->horizontalHeader()->setFixedHeight(40);
|
||
|
||
ui->widget->setHidden(false);
|
||
|
||
ui->lineEdit->setFixedSize(170,30);
|
||
ui->comboBox->setFixedSize(170,30);
|
||
ui->comboBox_2->setFixedSize(170,30);
|
||
|
||
ui->tableWidget->verticalHeader()->setVisible(false);
|
||
|
||
ui->tableWidget_2->verticalHeader()->setVisible(false);
|
||
|
||
m_maxtu=new maxtu;
|
||
connect(this, SIGNAL(yuan(QPixmap)),m_maxtu, SLOT(getyuan(QPixmap)));
|
||
connect(m_zidingyi, SIGNAL(ming(QString)),this, SLOT(getming(QString)));
|
||
connect(this, SIGNAL(shuaxin()),m_michistoricalrecords, SLOT(getshuaxin()));
|
||
connect(this,&micjishu::shuaxin,m_michistoricalrecords,&michistoricalrecords::getshuaxin);
|
||
ui->label_8->setHidden(true);
|
||
ui->label_9->setHidden(true);
|
||
ui->label_10->setHidden(true);
|
||
ui->label_11->setHidden(true);
|
||
ui->label_12->setHidden(true);
|
||
ui->pushButton_7->setHidden(true);
|
||
ui->label_7->setHidden(true);
|
||
setMouseTracking(true);
|
||
connect(m_michistoricalrecords, SIGNAL(guan2()), this, SLOT(getguan()));
|
||
ui->tableWidget->setShowGrid(false);
|
||
|
||
|
||
|
||
|
||
ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
|
||
ui->tableWidget_2->setShowGrid(false);
|
||
|
||
|
||
ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
ui->tableWidget_2->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
ui->tableWidget_3->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
ui->tableWidget_3->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
ui->tableWidget_2->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
|
||
ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);
|
||
// 设置鼠标点击行为为不选中任何项
|
||
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
|
||
ui->tableWidget_2->setSelectionMode(QAbstractItemView::NoSelection);
|
||
// 设置鼠标点击行为为不选中任何项
|
||
ui->tableWidget_2->setSelectionBehavior(QAbstractItemView::SelectItems);
|
||
|
||
|
||
ui->pushButton_3->setHidden(true);
|
||
ui->label_7->setHidden(true);
|
||
|
||
|
||
|
||
connect(m_michistoricalrecords, &michistoricalrecords::tuichu2, this, [=](){emit tuichu();});
|
||
|
||
|
||
ui->tableWidget_3->setColumnCount(2);
|
||
ui->tableWidget_3->setColumnWidth(0, 170); // 设置第一列宽度,示例为100像素
|
||
ui->tableWidget_3->setColumnWidth(1, 0); // 将第二列(列索引为1)的宽度设置为0,实现隐藏效果
|
||
ui->tableWidget_3->horizontalHeader()->setVisible(false);
|
||
ui->tableWidget_3->verticalHeader()->setVisible(false);
|
||
connect(ui->tableWidget_3, &QTableWidget::itemClicked, this, &micjishu::on_tableWidget_3_itemClicked);
|
||
|
||
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
|
||
//设置阴影距离
|
||
shadow->setOffset(0, 0);
|
||
//设置阴影颜色
|
||
shadow->setColor(QColor(214, 214, 214));
|
||
//设置阴影圆角
|
||
shadow->setBlurRadius(30);
|
||
//给嵌套QWidget设置阴影
|
||
ui->frame->setFixedSize(1570,907);
|
||
ui->frame->setGraphicsEffect(shadow);
|
||
|
||
|
||
QGraphicsDropShadowEffect *shadow2 = new QGraphicsDropShadowEffect(this);
|
||
//设置阴影距离
|
||
shadow2->setOffset(0, 0);
|
||
//设置阴影颜色
|
||
shadow2->setColor(QColor(214, 214, 214));
|
||
//设置阴影圆角
|
||
shadow2->setBlurRadius(30);
|
||
ui->frame_2->setFixedSize(175,907);
|
||
ui->frame_2->setGraphicsEffect(shadow2);
|
||
|
||
ui->pushButton_4->setFixedSize(170,30);
|
||
ui->pushButton_11->setFixedSize(170,30);
|
||
|
||
// ui->frame_2->setFixedWidth(1720);
|
||
ui->checkBox->setHidden(true);
|
||
ui->checkBox_2->setHidden(true);
|
||
//ui->lineEdit->setHidden(true);
|
||
ui->label_3->setHidden(true);
|
||
ui->label_4->setHidden(true);
|
||
ui->label_15->setHidden(true);
|
||
ui->pushButton_6->setHidden(true);
|
||
ui->pushButton_8->setHidden(true);
|
||
//ui->pushButton_4->setHidden(true);
|
||
|
||
|
||
ui->label_5->setHidden(false);
|
||
ui->label_6->setHidden(true);
|
||
m_msgBox=new msgBox;
|
||
|
||
ui->widget_5->setFixedHeight(50);
|
||
timer = new QTimer(this);
|
||
connect(m_zidingyi,&zidingyi::quxiao,this,[=](){jixu=false;});
|
||
ui->comboBox->setCurrentIndex(-1);
|
||
ui->comboBox_2->setCurrentIndex(-1);
|
||
connect(this, &micjishu::print, m_pp, &printpage::getprint);
|
||
|
||
}
|
||
|
||
micjishu::~micjishu()
|
||
{
|
||
delete ui;
|
||
}
|
||
void micjishu::setbiaoge()
|
||
{
|
||
|
||
|
||
|
||
}
|
||
void micjishu::getming(QString s)
|
||
{
|
||
jixu=true;
|
||
ui->label_15->clear();
|
||
ui->label_15->setText(s);
|
||
|
||
m_msgBox->show();
|
||
|
||
}
|
||
|
||
void micjishu::on_tableWidget_3_itemClicked(QTableWidgetItem *item)
|
||
{
|
||
// 获取点击的单元格所在的行索引
|
||
int row = item->row();
|
||
// 获取该行第一列对应的QTableWidgetItem,假设第一列存放图片路径相关信息
|
||
QTableWidgetItem *pixmapItem = ui->tableWidget_3->item(row, 1);
|
||
if (pixmapItem) {
|
||
// 获取之前设置的图片路径
|
||
QString filePath = pixmapItem->text();
|
||
qDebug()<<filePath;
|
||
QPixmap pixmap(filePath);
|
||
if (!pixmap.isNull()) {
|
||
ui->label_6->setPixmap(pixmap);
|
||
ui->label_6->setScaledContents(true); // 设置图片自动缩放以适应QLabel大小
|
||
}
|
||
}
|
||
}
|
||
void micjishu::MICzhi(){
|
||
|
||
//ECV值
|
||
if(zhong=="新型隐球菌(VNⅠ)"){
|
||
qDebug()<<"新型隐球菌(VNⅠ)";
|
||
ECVList.append("8");
|
||
ECVList.append("0.25");
|
||
ECVList.append("0.25");
|
||
ECVList.append("0.25");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("8");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.5");
|
||
kongzhi();
|
||
}else if(zhong=="格特隐球菌(VGⅠ)"){
|
||
ECVList.append("16");
|
||
ECVList.append("0.5");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("4");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.5");
|
||
kongzhi();
|
||
}else if(zhong=="格特隐球菌(VGⅡ)"){
|
||
ECVList.append("32");
|
||
ECVList.append("1");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("32");
|
||
ECVList.append(" ");
|
||
ECVList.append("1");
|
||
kongzhi();
|
||
}
|
||
else if(zhong=="白念珠菌"){
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.06");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
SList.append("≤0.12");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤0.25");
|
||
SList.append("≤0.25");
|
||
SList.append(" ");
|
||
SList.append("≤0.25");
|
||
SList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.25-0.5");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.5");
|
||
IList.append("0.5");
|
||
IList.append(" ");
|
||
IList.append("0.5");
|
||
IList.append(" ");
|
||
|
||
SDDList.append("4");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
|
||
} else if(zhong=="光滑念珠菌"){
|
||
qDebug() << "光滑念珠菌";
|
||
ECVList.append(" ");
|
||
ECVList.append("4");
|
||
ECVList.append("0.25");
|
||
ECVList.append("1");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤0.12");
|
||
SList.append("≤0.06");
|
||
SList.append(" ");
|
||
SList.append("≤0.12");
|
||
SList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.25");
|
||
IList.append("0.12");
|
||
IList.append(" ");
|
||
IList.append("0.25");
|
||
IList.append(" ");
|
||
|
||
SDDList.append("≤32");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
RList.append("≥64");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥0.5");
|
||
RList.append("≥0.25");
|
||
RList.append(" ");
|
||
RList.append("≥0.5");
|
||
RList.append(" ");
|
||
|
||
} else if(zhong=="热带念珠菌"){
|
||
qDebug() << "热带念珠菌";
|
||
ECVList.append(" ");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.12");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
SList.append("0.12");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤0.25");
|
||
SList.append("≤0.25");
|
||
SList.append(" ");
|
||
SList.append("≤0.25");
|
||
SList.append(" ");
|
||
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.25-0.5");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.5");
|
||
IList.append("0.5");
|
||
IList.append(" ");
|
||
IList.append("0.5");
|
||
IList.append(" ");
|
||
|
||
SDDList.append("4");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
|
||
}else if(zhong=="近平滑念珠菌"){
|
||
ECVList.append(" ");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.25");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("1");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
SList.append("0.12");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤2");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.25-0.5");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("4");
|
||
IList.append("4");
|
||
IList.append(" ");
|
||
IList.append("4");
|
||
IList.append(" ");
|
||
|
||
SDDList.append("4");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
|
||
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥8");
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
}else if(zhong=="克柔念珠菌"){
|
||
ECVList.append(" ");
|
||
ECVList.append("1");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤0.5");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤0.25");
|
||
SList.append("≤0.25");
|
||
SList.append(" ");
|
||
SList.append("≤0.25");
|
||
SList.append(" ");
|
||
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("1");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("0.5");
|
||
IList.append("0.5");
|
||
IList.append(" ");
|
||
IList.append("0.5");
|
||
IList.append(" ");
|
||
|
||
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append("≥2");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
RList.append("≥1");
|
||
RList.append(" ");
|
||
|
||
}else if(zhong=="季也蒙念珠菌"){
|
||
ECVList.append("8");
|
||
ECVList.append("2");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤2");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
SList.append("≤2");
|
||
SList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("4");
|
||
IList.append("4");
|
||
IList.append(" ");
|
||
IList.append("4");
|
||
IList.append(" ");
|
||
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥8");
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
RList.append("≥8");
|
||
RList.append(" ");
|
||
|
||
}else if(zhong=="都柏林念珠菌"){
|
||
ECVList.append("0.5");
|
||
ECVList.append("0.25");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.12");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.12");
|
||
ECVList.append(" ");
|
||
ECVList.append("0.12");
|
||
ECVList.append("0.5");
|
||
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
}else if(zhong=="烟曲霉"){
|
||
ECVList.append(" ");
|
||
ECVList.append("1");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("1");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append("≤0.5");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append("1");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
|
||
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append("≥2");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
|
||
}
|
||
else if(zhong=="黄曲霉"){
|
||
ECVList.append(" ");
|
||
ECVList.append("1");
|
||
ECVList.append("2");
|
||
ECVList.append("0.5");
|
||
ECVList.append("1");
|
||
ECVList.append("0.5");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("4");
|
||
kongzhi();
|
||
}else if(zhong=="黑曲霉"){
|
||
ECVList.append(" ");
|
||
ECVList.append("4");
|
||
ECVList.append("2");
|
||
ECVList.append("2");
|
||
ECVList.append("4");
|
||
ECVList.append("0.25");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
kongzhi();
|
||
}else if(zhong=="土曲霉"){
|
||
ECVList.append(" ");
|
||
ECVList.append("2");
|
||
ECVList.append("2");
|
||
ECVList.append("1");
|
||
ECVList.append("1");
|
||
ECVList.append("0.12");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append("4");
|
||
kongzhi();
|
||
}else{
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
ECVList.append(" ");
|
||
kongzhi();
|
||
|
||
}
|
||
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(ECVList.at(row));
|
||
ui->tableWidget->setItem(row, 4, item4);
|
||
}
|
||
|
||
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(SList.at(row));
|
||
ui->tableWidget->setItem(row, 5, item4);
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(IList.at(row));
|
||
ui->tableWidget->setItem(row, 6, item4);
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(SDDList.at(row));
|
||
ui->tableWidget->setItem(row, 7, item4);
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(RList.at(row));
|
||
ui->tableWidget->setItem(row, 8, item4);
|
||
}
|
||
|
||
|
||
|
||
qDebug() << "SList:" << SList;
|
||
qDebug() << "IList:" << IList;
|
||
qDebug() << "SDDList:" << SDDList;
|
||
qDebug() << "RList:" << RList;
|
||
|
||
};
|
||
void micjishu::kongzhi(){
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
SList.append(" ");
|
||
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
SDDList.append(" ");
|
||
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
IList.append(" ");
|
||
|
||
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
RList.append(" ");
|
||
};
|
||
void micjishu::usepython()
|
||
{
|
||
// Py_SetPythonHome(L"C:/ProgramData/Anaconda3");
|
||
|
||
Py_SetPythonHome(L"D:/python");
|
||
Py_Initialize();
|
||
PyRun_SimpleString("import sys");
|
||
PyRun_SimpleString("sys.argv = ['python.py']");
|
||
PyRun_SimpleString("sys.path.append('./')");
|
||
PyObject* pModule = PyImport_ImportModule("MIC_main");
|
||
if (!pModule)
|
||
{
|
||
PyErr_Print();
|
||
qDebug()<<"Cant open python file!\n";
|
||
QMessageBox::information(NULL, "提示", "图片识别有误,请重试");
|
||
m_msgBox->close();
|
||
return; // 提前返回避免继续执行
|
||
}
|
||
else{
|
||
qDebug()<<"file of python ac been opened";}
|
||
PyObject* pFunhello= PyObject_GetAttrString(pModule,"main_function");
|
||
if(!pFunhello){
|
||
qDebug()<<"Get function hello failed";
|
||
QMessageBox::information(NULL, "提示", "图片识别有误,请重试");
|
||
m_msgBox->close();
|
||
return; // 提前返回避免继续执行
|
||
}
|
||
else
|
||
{
|
||
PyObject* args = PyTuple_New(7); // 创建一个包含2个元素的元组用于存放参数
|
||
// 设置第一个参数,这里假设是整数类型,设置为10,可根据实际需求替换数值
|
||
|
||
PyObject* arg1 = PyUnicode_FromString("use/MIC/MIC/药敏板药物信息示例/药敏板药物信息示例.xlsx");
|
||
PyTuple_SetItem(args, 0, arg1);
|
||
|
||
PyObject* arg2 = PyUnicode_FromString("use/MIC/MIC/药敏板药物信息示例/药敏板药品判读规则表格.xlsx");
|
||
PyTuple_SetItem(args, 1, arg2);
|
||
PyObject* arg3 = PyUnicode_FromString("use/MIC/MIC/药敏板药物信息示例/MIC解释标准及ECV值.xlsx");
|
||
PyTuple_SetItem(args, 2, arg3);
|
||
|
||
PyObject* arg4 = PyUnicode_FromString(savelujing2.toUtf8().constData());
|
||
PyTuple_SetItem(args, 3, arg4);
|
||
PyObject* arg5 = PyUnicode_FromString("use/4.png");
|
||
PyTuple_SetItem(args, 4, arg5);
|
||
|
||
shu= ui->comboBox->currentText();
|
||
QByteArray byteArray = shu.toUtf8();
|
||
PyObject* arg6 = PyUnicode_FromString(byteArray.constData());
|
||
PyTuple_SetItem(args, 5, arg6);
|
||
|
||
zhong= ui->comboBox_2->currentText();
|
||
QByteArray byteArray2 = zhong.toUtf8();
|
||
PyObject* arg7 = PyUnicode_FromString(byteArray2.constData());
|
||
PyTuple_SetItem(args, 6, arg7);
|
||
|
||
PyObject* result = PyObject_CallObject(pFunhello, args);
|
||
if (!result)
|
||
{ PyErr_Print();
|
||
qDebug() << "Call function failed";
|
||
QMessageBox::information(NULL, "提示", "图片识别有误,请重试");
|
||
m_msgBox->close();
|
||
return; // 提前返回避免继续执行
|
||
}
|
||
else
|
||
{//配1
|
||
//这里是如果能接受返回值
|
||
if (PyTuple_Check(result))
|
||
{//配2
|
||
// 获取元组中的元素个数
|
||
Py_ssize_t tupleSize = PyTuple_Size(result);
|
||
if (tupleSize == 5)
|
||
{
|
||
// 获取第一个列表并处理
|
||
PyObject* list1 = PyTuple_GetItem(result, 0);
|
||
if (PyList_Check(list1))
|
||
{
|
||
Py_ssize_t list1Size = PyList_Size(list1);
|
||
if (list1Size == 10)
|
||
{
|
||
for (Py_ssize_t i = 0; i < list1Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list1, i);
|
||
if (PyUnicode_Check(element)) {
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
|
||
chineseNames.append(QString::fromUtf8(str));
|
||
}
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item1 = new QTableWidgetItem(chineseNames.at(row));
|
||
ui->tableWidget->setItem(row, 1, item1);
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first element in the returned tuple is not a list as expected";
|
||
}
|
||
|
||
// 获取第二个列表并处理
|
||
PyObject* list2 = PyTuple_GetItem(result, 1);
|
||
if (PyList_Check(list2))
|
||
{
|
||
Py_ssize_t list2Size = PyList_Size(list2);
|
||
if (list2Size == 10)
|
||
{
|
||
for (Py_ssize_t i = 0; i < list2Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list2, i);
|
||
if (PyUnicode_Check(element)) {
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
englishNames.append(QString::fromUtf8(str));
|
||
}
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
QTableWidgetItem *item2 = new QTableWidgetItem(englishNames.at(row));
|
||
ui->tableWidget->setItem(row, 2, item2);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The second returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The second element in the returned tuple is not a list as expected";
|
||
}
|
||
// 获取第三个列表并处理
|
||
PyObject* list3 = PyTuple_GetItem(result, 2);
|
||
if (PyList_Check(list3))
|
||
{
|
||
Py_ssize_t list13Size = PyList_Size(list3);
|
||
if (list13Size == 10)
|
||
{
|
||
for (Py_ssize_t i = 0; i < list13Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list3, i);
|
||
if (PyUnicode_Check(element)) {
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
|
||
if(shu=="曲霉属"&&(i==5||i==6||i==8)){
|
||
micValues.append(" ");
|
||
|
||
|
||
|
||
}else{
|
||
micValues.append(QString::fromUtf8(str));
|
||
}
|
||
|
||
}
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
QTableWidgetItem *item3 = new QTableWidgetItem(micValues.at(row));
|
||
ui->tableWidget->setItem(row, 3, item3);
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first element in the returned tuple is not a list as expected";
|
||
}
|
||
// 获取第四个列表并处理
|
||
PyObject* list4 = PyTuple_GetItem(result, 3);
|
||
if (PyList_Check(list4))
|
||
{
|
||
Py_ssize_t list41Size = PyList_Size(list4);
|
||
if (list41Size == 10)
|
||
{
|
||
MICzhi();
|
||
|
||
|
||
for (Py_ssize_t i = 0; i < list41Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list4, i);
|
||
if (!element || !PyUnicode_Check(element)) {
|
||
explanations.append("无效的Python对象");
|
||
continue;
|
||
}
|
||
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
if (!str) {
|
||
explanations.append("Python字符串转换失败");
|
||
continue;
|
||
}
|
||
|
||
// 检查 micValues 和 ECVList 是否越界
|
||
if (i >= micValues.size() || i >= ECVList.size()) {
|
||
explanations.append("数据不足");
|
||
continue;
|
||
}
|
||
qDebug()<<zhong;
|
||
if (zhong == "新型隐球菌(VNⅠ)"&&(i == 0 || i == 1 || i == 2 || i == 3 || i == 7|| i == 9)) {
|
||
|
||
bool ok1, ok2;
|
||
double micValue = micValues[i].toDouble(&ok1);
|
||
double ecvValue = ECVList[i].toDouble(&ok2);
|
||
|
||
if (!ok1 || !ok2) {
|
||
explanations.append("数值转换失败");
|
||
} else if (micValue <= ecvValue) {
|
||
explanations.append("野生型");
|
||
} else {
|
||
explanations.append("非野生型");
|
||
}
|
||
} else if (zhong == "新型隐球菌(VNⅠ)"&&(i == 5 || i == 6 || i == 8)) {
|
||
explanations.append("天然耐药");
|
||
}else if (zhong == "格特隐球菌(VGⅠ)"&&(i == 0 || i == 1 || i == 2 || i == 7|| i == 9)) {
|
||
qDebug()<<"格特隐球菌(VNⅠ)";
|
||
bool ok1, ok2;
|
||
double micValue = micValues[i].toDouble(&ok1);
|
||
double ecvValue = ECVList[i].toDouble(&ok2);
|
||
|
||
if (!ok1 || !ok2) {
|
||
explanations.append("数值转换失败");
|
||
} else if (micValue <= ecvValue) {
|
||
explanations.append("野生型");
|
||
} else {
|
||
explanations.append("非野生型");
|
||
}
|
||
} else if (zhong == "格特隐球菌(VGⅠ)"&&(i == 5 || i == 6 || i == 8) ){
|
||
explanations.append("天然耐药");
|
||
}else if (zhong == "格特隐球菌(VGⅡ)"&&(i == 0 || i == 1 || i == 2 || i == 7|| i == 9)) {
|
||
qDebug()<<"格特隐球菌(VGⅡ)";
|
||
bool ok1, ok2;
|
||
double micValue = micValues[i].toDouble(&ok1);
|
||
double ecvValue = ECVList[i].toDouble(&ok2);
|
||
|
||
if (!ok1 || !ok2) {
|
||
explanations.append("数值转换失败");
|
||
} else if (micValue <= ecvValue) {
|
||
explanations.append("野生型");
|
||
} else {
|
||
explanations.append("非野生型");
|
||
}
|
||
} else if (zhong == "格特隐球菌(VGⅡ)"&&(i == 5 || i == 6 || i == 8) ){
|
||
explanations.append("天然耐药");
|
||
}
|
||
else if(shu=="曲霉属"&&i==0){
|
||
explanations.append("天然耐药");
|
||
|
||
}else if(shu=="曲霉属"&&(i==5||i==6||i==8)){
|
||
explanations.append("");
|
||
//另外需要都ECV值??
|
||
|
||
|
||
}else if (zhong == "克柔念珠菌" && i == 0) {
|
||
explanations.append("天然耐药");
|
||
}
|
||
else {
|
||
QString utf8Str = QString::fromUtf8(str);
|
||
if(utf8Str=="S"){
|
||
utf8Str="敏感";
|
||
}else if(utf8Str=="I"){
|
||
utf8Str="中介";
|
||
}else if(utf8Str=="SDD"){
|
||
utf8Str="剂量依赖性敏感";
|
||
}else if(utf8Str=="R"){
|
||
utf8Str="耐药";
|
||
}
|
||
explanations.append(utf8Str);
|
||
qDebug() << "Element at index" << i << ": " << utf8Str;
|
||
}
|
||
}
|
||
|
||
|
||
qDebug()<<"mic值"<<micValues;
|
||
qDebug()<<"ecv值"<<ECVList;
|
||
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(explanations.at(row));
|
||
ui->tableWidget->setItem(row, 9, item4);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first element in the returned tuple is not a list as expected";
|
||
}
|
||
// 获取第五个列表并处理
|
||
PyObject* MIC_position_list = PyTuple_GetItem(result, 4);
|
||
if (PyList_Check(MIC_position_list)) {
|
||
Py_ssize_t positionListSize = PyList_Size(MIC_position_list);
|
||
for (Py_ssize_t i = 0; i < positionListSize; ++i) {
|
||
PyObject* element = PyList_GetItem(MIC_position_list, i);
|
||
if (PyTuple_Check(element)) {
|
||
Py_ssize_t tupleElementSize = PyTuple_Size(element);
|
||
if (tupleElementSize == 2) {
|
||
PyObject* xObj = PyTuple_GetItem(element, 0);
|
||
PyObject* yObj = PyTuple_GetItem(element, 1);
|
||
if (PyLong_Check(xObj) && PyLong_Check(yObj)) {
|
||
long x = PyLong_AsLong(xObj);
|
||
long y = PyLong_AsLong(yObj);
|
||
//qDebug() << "MIC Position: (" << x << ", " << y << ")";
|
||
QString positionStr = QString("(%1, %2)").arg(x).arg(y);
|
||
positionStrList.append(positionStr);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
chineseNames.clear();
|
||
englishNames.clear();
|
||
micValues.clear();
|
||
explanations.clear();
|
||
positionStrList.clear();
|
||
ECVList.clear();
|
||
SList.clear();
|
||
IList.clear();
|
||
SDDList.clear();
|
||
RList.clear();
|
||
|
||
|
||
//为表格增加序号1-10
|
||
for (int row = 0; row < 10; ++row) { QTableWidgetItem *item = new QTableWidgetItem(xuhao.at(row));
|
||
ui->tableWidget->setItem(row, 0, item);}
|
||
|
||
for (int row = 0; row < 10; ++row) { QTableWidgetItem *item = new QTableWidgetItem(xuhao.at(row));
|
||
ui->tableWidget_2->setItem(row, 0, item);}
|
||
|
||
//文字居中
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int j = 0; j < ui->tableWidget->columnCount(); ++j) {
|
||
QTableWidgetItem *item = ui->tableWidget->item(i, j);
|
||
if (item) {
|
||
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
}
|
||
}
|
||
}
|
||
for (int i = 0; i < ui->tableWidget_2->rowCount(); ++i) {
|
||
for (int j = 0; j < ui->tableWidget_2->columnCount(); ++j) {
|
||
QTableWidgetItem *item = ui->tableWidget_2->item(i, j);
|
||
if (item) {
|
||
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
}
|
||
}
|
||
}
|
||
//显示图片
|
||
QString aFile = QString("use/4.png");
|
||
ui->label_5->setHidden(true);
|
||
ui->label_6->setHidden(false);
|
||
|
||
ui->label_6->setPixmap(aFile);
|
||
ui->label_6->setScaledContents(true);
|
||
|
||
fenge();
|
||
|
||
|
||
QPalette palette = ui->tableWidget->palette();
|
||
QColor color2= Qt::white;
|
||
QColor color1 = QColor(229,247,255);
|
||
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int col = 0; col < ui->tableWidget->columnCount(); ++col) {
|
||
QTableWidgetItem *item = ui->tableWidget->item(i, col);
|
||
if (!item) {
|
||
item = new QTableWidgetItem();
|
||
ui->tableWidget->setItem(i, col, item);
|
||
}
|
||
if (i % 2 == 0) {
|
||
item->setBackground(QBrush(color1));
|
||
} else {
|
||
item->setBackground(QBrush(color2));
|
||
}
|
||
}
|
||
}
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int col = 0; col < ui->tableWidget->columnCount(); ++col) {
|
||
QTableWidgetItem *item = ui->tableWidget_2->item(i, col);
|
||
if (!item) {
|
||
item = new QTableWidgetItem();
|
||
ui->tableWidget->setItem(i, col, item);
|
||
}
|
||
if (i % 2 == 0) {
|
||
item->setBackground(QBrush(color2));
|
||
} else {
|
||
item->setBackground(QBrush(color1));
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
get();
|
||
|
||
QString timeStamp = QDate::currentDate().toString("yyyy-MM-dd");
|
||
QString folderName = "use/micpandu/" + timeStamp;
|
||
QString timeStampFull = QTime::currentTime().toString("hh-mm-ss");
|
||
//如果没有自命名
|
||
if(ui->label_15->text().isEmpty()){
|
||
|
||
|
||
|
||
savePath3 = folderName + "/" + timeStampFull + "_Y" + ".png";
|
||
savePath4 = folderName + "/" + timeStampFull + "_J" + ".png";
|
||
savePath5 = folderName + "/" + timeStampFull + ".csv";
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
|
||
|
||
// 开启事务,确保操作的原子性
|
||
dbmic.transaction();
|
||
|
||
// 第一步:更新现有行的 xuhao,使其序号依次加 1
|
||
// 从最大的 xuhao 开始递减更新,避免 xuhao 冲突
|
||
QSqlQuery updateQuery(dbmic);
|
||
updateQuery.prepare("SELECT MAX(xuhao) FROM micjishu");
|
||
if (updateQuery.exec() && updateQuery.next()) {
|
||
int maxXuhao = updateQuery.value(0).toInt();
|
||
for (int i = maxXuhao; i >= 1; --i) {
|
||
QSqlQuery updateXuhaoQuery(dbmic);
|
||
updateXuhaoQuery.prepare("UPDATE micjishu SET xuhao = :newXuhao WHERE xuhao = :oldXuhao");
|
||
updateXuhaoQuery.bindValue(":newXuhao", i + 1);
|
||
updateXuhaoQuery.bindValue(":oldXuhao", i);
|
||
if (!updateXuhaoQuery.exec()) {
|
||
qDebug() << "更新 xuhao 失败:" << updateXuhaoQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
}
|
||
} else {
|
||
qDebug() << "获取最大 xuhao 失败:" << updateQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
// 新增:插入多列数据
|
||
QSqlQuery query(dbmic);
|
||
|
||
query.prepare("INSERT INTO micjishu (xuhao, time, yuanshi, jieguo, xiangcheng,junshu,junzhong,weihao,shenghao,caozuo) VALUES ( :xuhao,:time, :yuanshi, :jieguo, :xiangcheng, :junshu, :junzhong, :weihao, :shenghao,:caozuo)");
|
||
query.bindValue(":xuhao", 1);
|
||
query.bindValue(":time", gettime());
|
||
query.bindValue(":yuanshi", savePath3);
|
||
query.bindValue(":jieguo", savePath4);
|
||
|
||
query.bindValue(":xiangcheng", "真菌药敏试剂盒");
|
||
query.bindValue(":junshu", ui->comboBox->currentText());
|
||
query.bindValue(":junzhong", ui->comboBox_2->currentText());
|
||
query.bindValue(":weihao", ui->label_9->text());
|
||
query.bindValue(":shenghao", ui->label_10->text());
|
||
query.bindValue(":caozuo", savePath5);
|
||
|
||
if (!query.exec()) {
|
||
qDebug() << "插入多列数据失败:" << query.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
// 提交事务
|
||
if (dbmic.commit()) {
|
||
qDebug() << "数据插入并重新排序成功";
|
||
emit shuaxin();
|
||
|
||
} else {
|
||
qDebug() << "事务提交失败:" << dbmic.lastError().text();
|
||
}
|
||
|
||
|
||
|
||
|
||
QTableWidgetItem *filePathItem = new QTableWidgetItem();
|
||
filePathItem->setText(savePath4);
|
||
|
||
|
||
QTableWidgetItem *pixmapItem = new QTableWidgetItem();
|
||
|
||
if (pixmap2.isNull()) {
|
||
qDebug() << "图片加载失败,请检查文件路径和图片格式是否正确";
|
||
return;
|
||
}
|
||
|
||
// 对图片进行缩放,保持长宽比使其适应指定大小(这里设置为100x100)
|
||
pixmap2 = pixmap2.scaled(170, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||
pixmapItem->setIcon(QIcon(pixmap2));
|
||
ui->tableWidget_3->setIconSize(QSize(170,120));
|
||
// 插入新行
|
||
ui->tableWidget_3->insertRow(row);
|
||
|
||
// 将Pixmap对应的Item添加到第一列
|
||
ui->tableWidget_3->setItem(row, 0, pixmapItem);
|
||
|
||
// 将文件路径对应的Item添加到第二列
|
||
ui->tableWidget_3->setItem(row, 1, filePathItem);
|
||
|
||
ui->tableWidget_3->setRowHeight(row,130);
|
||
|
||
row++;
|
||
m_msgBox->close();
|
||
|
||
|
||
}
|
||
else{
|
||
|
||
QString zidingyi=ui->label_15->text();
|
||
|
||
|
||
savePath = folderName + "/" + zidingyi + "_Y" + ".png";
|
||
savePath2 = folderName + "/" + zidingyi + "_J" + ".png";
|
||
savePath6 = folderName + "/" + zidingyi + ".csv";
|
||
|
||
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
// 开启事务,确保操作的原子性
|
||
dbmic.transaction();
|
||
|
||
// 第一步:更新现有行的 xuhao,使其序号依次加 1
|
||
// 从最大的 xuhao 开始递减更新,避免 xuhao 冲突
|
||
QSqlQuery updateQuery(dbmic);
|
||
updateQuery.prepare("SELECT MAX(xuhao) FROM micjishu");
|
||
if (updateQuery.exec() && updateQuery.next()) {
|
||
int maxXuhao = updateQuery.value(0).toInt();
|
||
for (int i = maxXuhao; i >= 1; --i) {
|
||
QSqlQuery updateXuhaoQuery(dbmic);
|
||
updateXuhaoQuery.prepare("UPDATE micjishu SET xuhao = :newXuhao WHERE xuhao = :oldXuhao");
|
||
updateXuhaoQuery.bindValue(":newXuhao", i + 1);
|
||
updateXuhaoQuery.bindValue(":oldXuhao", i);
|
||
if (!updateXuhaoQuery.exec()) {
|
||
qDebug() << "更新 xuhao 失败:" << updateXuhaoQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
}
|
||
} else {
|
||
qDebug() << "获取最大 xuhao 失败:" << updateQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
// 新增:插入多列数据
|
||
QSqlQuery query(dbmic);
|
||
|
||
query.prepare("INSERT INTO micjishu (xuhao, time, yuanshi, jieguo, xiangcheng,junshu,junzhong,weihao,shenghao,caozuo) VALUES ( :xuhao,:time, :yuanshi, :jieguo, :xiangcheng, :junshu, :junzhong, :weihao, :shenghao,:caozuo)");
|
||
query.bindValue(":xuhao", 1);
|
||
query.bindValue(":time", gettime());
|
||
query.bindValue(":yuanshi", savePath);
|
||
query.bindValue(":jieguo", savePath2);
|
||
|
||
query.bindValue(":xiangcheng", "真菌药敏试剂盒");
|
||
query.bindValue(":junshu", ui->comboBox->currentText());
|
||
query.bindValue(":junzhong", ui->comboBox_2->currentText());
|
||
query.bindValue(":weihao", ui->label_9->text());
|
||
query.bindValue(":shenghao", ui->label_10->text());
|
||
query.bindValue(":caozuo", savePath5);
|
||
|
||
if (!query.exec()) {
|
||
qDebug() << "插入多列数据失败:" << query.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
// 提交事务
|
||
if (dbmic.commit()) {
|
||
qDebug() << "数据插入并重新排序成功";
|
||
emit shuaxin();
|
||
|
||
} else {
|
||
qDebug() << "事务提交失败:" << dbmic.lastError().text();
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
QTableWidgetItem *filePathItem = new QTableWidgetItem();
|
||
filePathItem->setText(savePath2);
|
||
|
||
|
||
QTableWidgetItem *pixmapItem = new QTableWidgetItem();
|
||
|
||
if (pixmap2.isNull()) {
|
||
qDebug() << "图片加载失败,请检查文件路径和图片格式是否正确";
|
||
return;
|
||
}
|
||
|
||
// 对图片进行缩放,保持长宽比使其适应指定大小(这里设置为100x100)
|
||
pixmap2 = pixmap2.scaled(170, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||
pixmapItem->setIcon(QIcon(pixmap2));
|
||
ui->tableWidget_3->setIconSize(QSize(170,120));
|
||
|
||
|
||
|
||
// 插入新行
|
||
ui->tableWidget_3->insertRow(row);
|
||
|
||
// 将Pixmap对应的Item添加到第一列
|
||
ui->tableWidget_3->setItem(row, 0, pixmapItem);
|
||
|
||
// 将文件路径对应的Item添加到第二列
|
||
ui->tableWidget_3->setItem(row, 1, filePathItem);
|
||
|
||
ui->tableWidget_3->setRowHeight(row,130);
|
||
|
||
row++;
|
||
|
||
m_msgBox->close();
|
||
|
||
|
||
}
|
||
|
||
|
||
QtConcurrent::run(&micjishu::savezhao, this);
|
||
//第五个结束
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "Returned tuple does not have 2 elements as expected";
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "Function did not return a tuple as expected";
|
||
}
|
||
|
||
|
||
}//配1
|
||
|
||
// 释放资源,遵循引用计数规则
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
void micjishu::usepython2()
|
||
{
|
||
|
||
PyObject* pModule = PyImport_ImportModule("MIC_main");
|
||
if (!pModule)
|
||
{
|
||
PyErr_Print();
|
||
qDebug()<<"Cant open python file!\n";
|
||
QMessageBox::information(NULL, "提示", "图片识别有误,请重试");
|
||
m_msgBox->close();
|
||
return; // 提前返回避免继续执行
|
||
|
||
}
|
||
else{
|
||
qDebug()<<"file of python ac been opened";}
|
||
PyObject* pFunhello= PyObject_GetAttrString(pModule,"add_position");
|
||
if(!pFunhello){
|
||
PyErr_Print();
|
||
|
||
qDebug()<<"Get function hello failed";
|
||
QMessageBox::information(NULL, "提示", "图片识别有误,请重试");
|
||
m_msgBox->close();
|
||
return; // 提前返回避免继续执行
|
||
}
|
||
else
|
||
{
|
||
PyObject* args = PyTuple_New(9); // 创建一个包含2个元素的元组用于存放参数
|
||
// 设置第一个参数,这里假设是整数类型,设置为10,可根据实际需求替换数值
|
||
// 设置第一个参数,这里假设是整数类型,设置为10,可根据实际需求替换数值
|
||
PyObject* arg1 = PyUnicode_FromString("use/MIC/MIC/药敏板药物信息示例/药敏板药物信息示例.xlsx");
|
||
PyTuple_SetItem(args, 0, arg1);
|
||
|
||
PyObject* arg2 = PyUnicode_FromString("use/MIC/MIC/药敏板药物信息示例/药敏板药品判读规则表格.xlsx");
|
||
PyTuple_SetItem(args, 1, arg2);
|
||
PyObject* arg3 = PyUnicode_FromString("use/MIC/MIC/药敏板药物信息示例/MIC解释标准及ECV值.xlsx");
|
||
PyTuple_SetItem(args, 2, arg3);
|
||
PyObject* arg4 = PyUnicode_FromString("use/MIC/MIC/data/res/img_copy.png");
|
||
PyTuple_SetItem(args, 3, arg4);
|
||
PyObject* arg5 = PyUnicode_FromString("use/3.png");
|
||
PyTuple_SetItem(args, 4, arg5);
|
||
|
||
float a=x*5.498 ;
|
||
float b=y*5.2154;
|
||
int xx=a;
|
||
int yy=b;
|
||
qDebug()<<x;
|
||
qDebug()<<y;
|
||
qDebug()<<xx;
|
||
|
||
qDebug()<<yy;
|
||
|
||
PyObject* arg6 = PyLong_FromLong(xx);
|
||
PyTuple_SetItem(args, 5, arg6);
|
||
|
||
PyObject* arg7 = PyLong_FromLong(yy);
|
||
PyTuple_SetItem(args, 6, arg7);
|
||
|
||
|
||
QString shu= ui->comboBox->currentText();
|
||
QByteArray byteArray = shu.toUtf8();
|
||
PyObject* arg8 = PyUnicode_FromString(byteArray.constData());
|
||
PyTuple_SetItem(args, 7, arg8);
|
||
|
||
QString zhong= ui->comboBox_2->currentText();
|
||
QByteArray byteArray2 = zhong.toUtf8();
|
||
PyObject* arg9 = PyUnicode_FromString(byteArray2.constData());
|
||
PyTuple_SetItem(args, 8, arg9);
|
||
|
||
|
||
|
||
PyObject* result = PyObject_CallObject(pFunhello, args);
|
||
if (!result)
|
||
{ PyErr_Print();
|
||
qDebug() << "Call function failed";
|
||
QMessageBox::information(NULL, "提示", "图片识别有误,请重试");
|
||
m_msgBox->close();
|
||
return; // 提前返回避免继续执行
|
||
}
|
||
else
|
||
{
|
||
|
||
//配1
|
||
//这里是如果能接受返回值
|
||
if (PyTuple_Check(result))
|
||
{//配2
|
||
// 获取元组中的元素个数
|
||
Py_ssize_t tupleSize = PyTuple_Size(result);
|
||
if (tupleSize == 5)
|
||
{
|
||
// 获取第一个列表并处理
|
||
PyObject* list1 = PyTuple_GetItem(result, 0);
|
||
if (PyList_Check(list1))
|
||
{
|
||
Py_ssize_t list1Size = PyList_Size(list1);
|
||
if (list1Size == 10)
|
||
{
|
||
for (Py_ssize_t i = 0; i < list1Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list1, i);
|
||
if (PyUnicode_Check(element)) {
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
|
||
chineseNames.append(QString::fromUtf8(str));
|
||
}
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item1 = new QTableWidgetItem(chineseNames.at(row));
|
||
ui->tableWidget->setItem(row, 1, item1);
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first element in the returned tuple is not a list as expected";
|
||
}
|
||
|
||
// 获取第二个列表并处理
|
||
PyObject* list2 = PyTuple_GetItem(result, 1);
|
||
if (PyList_Check(list2))
|
||
{
|
||
Py_ssize_t list2Size = PyList_Size(list2);
|
||
if (list2Size == 10)
|
||
{
|
||
for (Py_ssize_t i = 0; i < list2Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list2, i);
|
||
if (PyUnicode_Check(element)) {
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
englishNames.append(QString::fromUtf8(str));
|
||
}
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
QTableWidgetItem *item2 = new QTableWidgetItem(englishNames.at(row));
|
||
ui->tableWidget->setItem(row, 2, item2);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The second returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The second element in the returned tuple is not a list as expected";
|
||
}
|
||
// 获取第三个列表并处理
|
||
PyObject* list3 = PyTuple_GetItem(result, 2);
|
||
if (PyList_Check(list3))
|
||
{
|
||
Py_ssize_t list13Size = PyList_Size(list3);
|
||
if (list13Size == 10)
|
||
{
|
||
for (Py_ssize_t i = 0; i < list13Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list3, i);
|
||
if (PyUnicode_Check(element)) {
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
if(shu=="曲霉属"&&(i==5||i==6||i==8)){
|
||
micValues.append(" ");
|
||
|
||
|
||
|
||
}else{
|
||
micValues.append(QString::fromUtf8(str));
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
QTableWidgetItem *item3 = new QTableWidgetItem(micValues.at(row));
|
||
ui->tableWidget->setItem(row, 3, item3);
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first element in the returned tuple is not a list as expected";
|
||
}
|
||
// 获取第四个列表并处理
|
||
PyObject* list4 = PyTuple_GetItem(result, 3);
|
||
if (PyList_Check(list4))
|
||
{
|
||
Py_ssize_t list41Size = PyList_Size(list4);
|
||
if (list41Size == 10)
|
||
{
|
||
|
||
|
||
MICzhi();
|
||
|
||
|
||
for (Py_ssize_t i = 0; i < list41Size; ++i) {
|
||
PyObject* element = PyList_GetItem(list4, i);
|
||
if (!element || !PyUnicode_Check(element)) {
|
||
explanations.append("无效的Python对象");
|
||
continue;
|
||
}
|
||
|
||
const char* str = PyUnicode_AsUTF8(element);
|
||
if (!str) {
|
||
explanations.append("Python字符串转换失败");
|
||
continue;
|
||
}
|
||
|
||
// 检查 micValues 和 ECVList 是否越界
|
||
if (i >= micValues.size() || i >= ECVList.size()) {
|
||
explanations.append("数据不足");
|
||
continue;
|
||
}
|
||
qDebug()<<zhong;
|
||
if (zhong == "新型隐球菌(VNⅠ)"&&(i == 0 || i == 1 || i == 2 || i == 3 || i == 7|| i == 9)) {
|
||
|
||
bool ok1, ok2;
|
||
double micValue = micValues[i].toDouble(&ok1);
|
||
double ecvValue = ECVList[i].toDouble(&ok2);
|
||
|
||
if (!ok1 || !ok2) {
|
||
explanations.append("数值转换失败");
|
||
} else if (micValue <= ecvValue) {
|
||
explanations.append("野生型");
|
||
} else {
|
||
explanations.append("非野生型");
|
||
}
|
||
} else if (zhong == "新型隐球菌(VNⅠ)"&&(i == 5 || i == 6 || i == 8)) {
|
||
explanations.append("天然耐药");
|
||
}else if (zhong == "格特隐球菌(VGⅠ)"&&(i == 0 || i == 1 || i == 2 || i == 7|| i == 9)) {
|
||
qDebug()<<"格特隐球菌(VNⅠ)";
|
||
bool ok1, ok2;
|
||
double micValue = micValues[i].toDouble(&ok1);
|
||
double ecvValue = ECVList[i].toDouble(&ok2);
|
||
|
||
if (!ok1 || !ok2) {
|
||
explanations.append("数值转换失败");
|
||
} else if (micValue <= ecvValue) {
|
||
explanations.append("野生型");
|
||
} else {
|
||
explanations.append("非野生型");
|
||
}
|
||
} else if (zhong == "格特隐球菌(VGⅠ)"&&(i == 5 || i == 6 || i == 8) ){
|
||
explanations.append("天然耐药");
|
||
}else if (zhong == "格特隐球菌(VGⅡ)"&&(i == 0 || i == 1 || i == 2 || i == 7|| i == 9)) {
|
||
qDebug()<<"格特隐球菌(VGⅡ)";
|
||
bool ok1, ok2;
|
||
double micValue = micValues[i].toDouble(&ok1);
|
||
double ecvValue = ECVList[i].toDouble(&ok2);
|
||
|
||
if (!ok1 || !ok2) {
|
||
explanations.append("数值转换失败");
|
||
} else if (micValue <= ecvValue) {
|
||
explanations.append("野生型");
|
||
} else {
|
||
explanations.append("非野生型");
|
||
}
|
||
} else if (zhong == "格特隐球菌(VGⅡ)"&&(i == 5 || i == 6 || i == 8) ){
|
||
explanations.append("天然耐药");
|
||
}
|
||
else if(shu=="曲霉属"&&i==0){
|
||
explanations.append("天然耐药");
|
||
|
||
}else if(shu=="曲霉属"&&(i==5||i==6||i==8)){
|
||
explanations.append("");
|
||
//另外需要都ECV值??
|
||
|
||
|
||
}else if (zhong == "克柔念珠菌" && i == 0) {
|
||
explanations.append("天然耐药");
|
||
}
|
||
else {
|
||
QString utf8Str = QString::fromUtf8(str);
|
||
if(utf8Str=="S"){
|
||
utf8Str="敏感";
|
||
}else if(utf8Str=="I"){
|
||
utf8Str="中介";
|
||
}else if(utf8Str=="SDD"){
|
||
utf8Str="剂量依赖性敏感";
|
||
}else if(utf8Str=="R"){
|
||
utf8Str="耐药";
|
||
}
|
||
explanations.append(utf8Str);
|
||
qDebug() << "Element at index" << i << ": " << utf8Str;
|
||
}
|
||
}
|
||
|
||
|
||
qDebug()<<"mic值"<<micValues;
|
||
qDebug()<<"ecv值"<<ECVList;
|
||
|
||
|
||
for (int row = 0; row < 10; ++row)
|
||
{
|
||
|
||
QTableWidgetItem *item4 = new QTableWidgetItem(explanations.at(row));
|
||
ui->tableWidget->setItem(row, 9, item4);
|
||
}
|
||
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first returned list does not have 3 elements as expected";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug() << "The first element in the returned tuple is not a list as expected";
|
||
}
|
||
// 获取第五个列表并处理
|
||
PyObject* MIC_position_list = PyTuple_GetItem(result, 4);
|
||
if (PyList_Check(MIC_position_list)) {
|
||
Py_ssize_t positionListSize = PyList_Size(MIC_position_list);
|
||
for (Py_ssize_t i = 0; i < positionListSize; ++i) {
|
||
PyObject* element = PyList_GetItem(MIC_position_list, i);
|
||
if (PyTuple_Check(element)) {
|
||
Py_ssize_t tupleElementSize = PyTuple_Size(element);
|
||
if (tupleElementSize == 2) {
|
||
PyObject* xObj = PyTuple_GetItem(element, 0);
|
||
PyObject* yObj = PyTuple_GetItem(element, 1);
|
||
if (PyLong_Check(xObj) && PyLong_Check(yObj)) {
|
||
long x = PyLong_AsLong(xObj);
|
||
long y = PyLong_AsLong(yObj);
|
||
//qDebug() << "MIC Position: (" << x << ", " << y << ")";
|
||
QString positionStr = QString("(%1, %2)").arg(x).arg(y);
|
||
positionStrList.append(positionStr);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
ui->label_5->setHidden(true);
|
||
ui->label_6->setHidden(false);
|
||
|
||
QString aFile = QString("use/3.png");
|
||
ui->label_6->setPixmap(aFile);
|
||
ui->label_6->setScaledContents(true);
|
||
|
||
|
||
get();
|
||
QString folderName;
|
||
QString timeStamp = QDate::currentDate().toString("yyyy-MM-dd");
|
||
folderName = "use/micpandu/" + timeStamp;
|
||
QString timeStampFull = QTime::currentTime().toString("hh-mm-ss");
|
||
|
||
if(ui->label_15->text().isEmpty()){
|
||
|
||
savePath5 = folderName + "/" + timeStampFull + ".csv";
|
||
|
||
|
||
savePath44 = folderName + "/" + timeStampFull + "_C" + ".png";
|
||
|
||
savePath33 = folderName + "/" + timeStampFull + "_Y" + ".png";
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
|
||
// 开启事务,确保操作的原子性
|
||
dbmic.transaction();
|
||
|
||
// 第一步:更新现有行的 xuhao,使其序号依次加 1
|
||
// 从最大的 xuhao 开始递减更新,避免 xuhao 冲突
|
||
QSqlQuery updateQuery(dbmic);
|
||
updateQuery.prepare("SELECT MAX(xuhao) FROM micjishu");
|
||
if (updateQuery.exec() && updateQuery.next()) {
|
||
int maxXuhao = updateQuery.value(0).toInt();
|
||
for (int i = maxXuhao; i >= 1; --i) {
|
||
QSqlQuery updateXuhaoQuery(dbmic);
|
||
updateXuhaoQuery.prepare("UPDATE micjishu SET xuhao = :newXuhao WHERE xuhao = :oldXuhao");
|
||
updateXuhaoQuery.bindValue(":newXuhao", i + 1);
|
||
updateXuhaoQuery.bindValue(":oldXuhao", i);
|
||
if (!updateXuhaoQuery.exec()) {
|
||
qDebug() << "更新 xuhao 失败:" << updateXuhaoQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
}
|
||
} else {
|
||
qDebug() << "获取最大 xuhao 失败:" << updateQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
// 新增:插入多列数据
|
||
QSqlQuery query(dbmic);
|
||
|
||
query.prepare("INSERT INTO micjishu (xuhao, time, yuanshi, jieguo, xiangcheng,junshu,junzhong,weihao,shenghao,caozuo) VALUES ( :xuhao,:time, :yuanshi, :jieguo, :xiangcheng, :junshu, :junzhong, :weihao, :shenghao,:caozuo)");
|
||
query.bindValue(":xuhao", 1);
|
||
query.bindValue(":time", gettime());
|
||
query.bindValue(":yuanshi", savePath33);
|
||
query.bindValue(":jieguo", savePath44);
|
||
|
||
query.bindValue(":xiangcheng", "真菌药敏试剂盒");
|
||
query.bindValue(":junshu", ui->comboBox->currentText());
|
||
query.bindValue(":junzhong", ui->comboBox_2->currentText());
|
||
query.bindValue(":weihao", ui->label_9->text());
|
||
query.bindValue(":shenghao", ui->label_10->text());
|
||
query.bindValue(":caozuo", savePath5);
|
||
|
||
if (!query.exec()) {
|
||
qDebug() << "插入多列数据失败:" << query.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
// 提交事务
|
||
if (dbmic.commit()) {
|
||
qDebug() << "数据插入并重新排序成功";
|
||
emit shuaxin();
|
||
|
||
} else {
|
||
qDebug() << "事务提交失败:" << dbmic.lastError().text();
|
||
}
|
||
|
||
|
||
|
||
|
||
QTableWidgetItem *filePathItem = new QTableWidgetItem();
|
||
filePathItem->setText(savePath44);
|
||
|
||
|
||
QTableWidgetItem *pixmapItem = new QTableWidgetItem();
|
||
|
||
if (pixmap2.isNull()) {
|
||
qDebug() << "图片加载失败,请检查文件路径和图片格式是否正确";
|
||
return;
|
||
}
|
||
|
||
// 对图片进行缩放,保持长宽比使其适应指定大小(这里设置为100x100)
|
||
pixmap2 = pixmap2.scaled(170, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||
pixmapItem->setIcon(QIcon(pixmap2));
|
||
ui->tableWidget_3->setIconSize(QSize(170,120));
|
||
// 插入新行
|
||
ui->tableWidget_3->insertRow(row);
|
||
|
||
// 将Pixmap对应的Item添加到第一列
|
||
ui->tableWidget_3->setItem(row, 0, pixmapItem);
|
||
|
||
// 将文件路径对应的Item添加到第二列
|
||
ui->tableWidget_3->setItem(row, 1, filePathItem);
|
||
|
||
ui->tableWidget_3->setRowHeight(row,130);
|
||
|
||
row++;
|
||
m_msgBox->close();
|
||
}
|
||
else{
|
||
|
||
QString zidingyi=ui->label_15->text();
|
||
savePath6 = folderName + "/" + zidingyi + ".csv";
|
||
savePath11 = folderName + "/" + zidingyi + "_Y" + ".png";
|
||
|
||
savePath22 = folderName + "/" + zidingyi + "_C" + ".png";
|
||
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
// 开启事务,确保操作的原子性
|
||
dbmic.transaction();
|
||
|
||
// 第一步:更新现有行的 xuhao,使其序号依次加 1
|
||
// 从最大的 xuhao 开始递减更新,避免 xuhao 冲突
|
||
QSqlQuery updateQuery(dbmic);
|
||
updateQuery.prepare("SELECT MAX(xuhao) FROM micjishu");
|
||
if (updateQuery.exec() && updateQuery.next()) {
|
||
int maxXuhao = updateQuery.value(0).toInt();
|
||
for (int i = maxXuhao; i >= 1; --i) {
|
||
QSqlQuery updateXuhaoQuery(dbmic);
|
||
updateXuhaoQuery.prepare("UPDATE micjishu SET xuhao = :newXuhao WHERE xuhao = :oldXuhao");
|
||
updateXuhaoQuery.bindValue(":newXuhao", i + 1);
|
||
updateXuhaoQuery.bindValue(":oldXuhao", i);
|
||
if (!updateXuhaoQuery.exec()) {
|
||
qDebug() << "更新 xuhao 失败:" << updateXuhaoQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
}
|
||
} else {
|
||
qDebug() << "获取最大 xuhao 失败:" << updateQuery.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
// 新增:插入多列数据
|
||
QSqlQuery query(dbmic);
|
||
|
||
query.prepare("INSERT INTO micjishu (xuhao, time, yuanshi, jieguo, xiangcheng,junshu,junzhong,weihao,shenghao,caozuo) VALUES ( :xuhao,:time, :yuanshi, :jieguo, :xiangcheng, :junshu, :junzhong, :weihao, :shenghao,:caozuo)");
|
||
query.bindValue(":xuhao", 1);
|
||
query.bindValue(":time", gettime());
|
||
query.bindValue(":yuanshi", savePath11);
|
||
query.bindValue(":jieguo", savePath22);
|
||
|
||
query.bindValue(":xiangcheng", "真菌药敏试剂盒");
|
||
query.bindValue(":junshu", ui->comboBox->currentText());
|
||
query.bindValue(":junzhong", ui->comboBox_2->currentText());
|
||
query.bindValue(":weihao", ui->label_9->text());
|
||
query.bindValue(":shenghao", ui->label_10->text());
|
||
query.bindValue(":caozuo", savePath6);
|
||
|
||
if (!query.exec()) {
|
||
qDebug() << "插入多列数据失败:" << query.lastError().text();
|
||
// 回滚事务
|
||
dbmic.rollback();
|
||
return;
|
||
}
|
||
|
||
// 提交事务
|
||
if (dbmic.commit()) {
|
||
qDebug() << "数据插入并重新排序成功";
|
||
emit shuaxin();
|
||
|
||
} else {
|
||
qDebug() << "事务提交失败:" << dbmic.lastError().text();
|
||
}
|
||
|
||
|
||
|
||
QTableWidgetItem *filePathItem = new QTableWidgetItem();
|
||
filePathItem->setText(savePath22);
|
||
|
||
|
||
QTableWidgetItem *pixmapItem = new QTableWidgetItem();
|
||
|
||
if (pixmap2.isNull()) {
|
||
qDebug() << "图片加载失败,请检查文件路径和图片格式是否正确";
|
||
return;
|
||
}
|
||
|
||
// 对图片进行缩放,保持长宽比使其适应指定大小(这里设置为100x100)
|
||
pixmap2 = pixmap2.scaled(170, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||
pixmapItem->setIcon(QIcon(pixmap2));
|
||
ui->tableWidget_3->setIconSize(QSize(170,120));
|
||
|
||
|
||
|
||
// 插入新行
|
||
ui->tableWidget_3->insertRow(row);
|
||
|
||
// 将Pixmap对应的Item添加到第一列
|
||
ui->tableWidget_3->setItem(row, 0, pixmapItem);
|
||
|
||
// 将文件路径对应的Item添加到第二列
|
||
ui->tableWidget_3->setItem(row, 1, filePathItem);
|
||
|
||
ui->tableWidget_3->setRowHeight(row,130);
|
||
|
||
row++;
|
||
|
||
m_msgBox->close();
|
||
|
||
}
|
||
|
||
fenge();
|
||
QPalette palette = ui->tableWidget->palette();
|
||
QColor color2= Qt::white;
|
||
QColor color1 = QColor(229,247,255);
|
||
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int col = 0; col < ui->tableWidget->columnCount(); ++col) {
|
||
QTableWidgetItem *item = ui->tableWidget->item(i, col);
|
||
if (!item) {
|
||
item = new QTableWidgetItem();
|
||
ui->tableWidget->setItem(i, col, item);
|
||
}
|
||
if (i % 2 == 0) {
|
||
item->setBackground(QBrush(color1));
|
||
} else {
|
||
item->setBackground(QBrush(color2));
|
||
}
|
||
}
|
||
}
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int col = 0; col < ui->tableWidget->columnCount(); ++col) {
|
||
QTableWidgetItem *item = ui->tableWidget_2->item(i, col);
|
||
if (!item) {
|
||
item = new QTableWidgetItem();
|
||
ui->tableWidget->setItem(i, col, item);
|
||
}
|
||
if (i % 2 == 0) {
|
||
item->setBackground(QBrush(color2));
|
||
} else {
|
||
item->setBackground(QBrush(color1));
|
||
}
|
||
}
|
||
}
|
||
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int j = 0; j < ui->tableWidget->columnCount(); ++j) {
|
||
QTableWidgetItem *item = ui->tableWidget->item(i, j);
|
||
if (item) {
|
||
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
}
|
||
}
|
||
}
|
||
for (int i = 0; i < ui->tableWidget_2->rowCount(); ++i) {
|
||
for (int j = 0; j < ui->tableWidget_2->columnCount(); ++j) {
|
||
QTableWidgetItem *item = ui->tableWidget_2->item(i, j);
|
||
if (item) {
|
||
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
QtConcurrent::run(&micjishu::savezhao2, this);
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
void micjishu::mouseDoubleClickEvent(QMouseEvent *event)
|
||
{
|
||
if (ui->label_6->geometry().contains(event->pos())) {
|
||
// 判断是否是左键点击
|
||
if (event->button() == Qt::LeftButton) {
|
||
QPoint posInLabel = event->pos() - ui->label_6->pos();
|
||
|
||
x = posInLabel.x();
|
||
y = posInLabel.y();
|
||
m_msgBox->show();
|
||
QTimer::singleShot(100,this,[=](){
|
||
chineseNames.clear();
|
||
englishNames.clear();
|
||
micValues.clear();
|
||
explanations.clear();
|
||
positionStrList.clear();
|
||
ECVList.clear();
|
||
SList.clear();
|
||
IList.clear();
|
||
SDDList.clear();
|
||
RList.clear();
|
||
usepython2();});
|
||
|
||
// 获取鼠标在全局屏幕上的坐标
|
||
QPoint globalPos = event->globalPos();
|
||
qDebug() << "在全局屏幕上的左键点击坐标: " << globalPos;
|
||
}
|
||
}
|
||
QWidget::mouseDoubleClickEvent(event);
|
||
}
|
||
void micjishu::getshui()
|
||
{
|
||
ui->comboBox->clear();
|
||
ui->comboBox_2->clear();
|
||
|
||
QString queryString = QString("SELECT name FROM junshu");
|
||
QSqlQuery mquery;
|
||
if (!mquery.exec(queryString)) {
|
||
|
||
|
||
}
|
||
while (mquery.next()) {
|
||
QVariant value = mquery.value(0);
|
||
ui->comboBox->addItem(value.toString());
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
void micjishu::on_comboBox_currentIndexChanged(const QString &arg1)
|
||
{
|
||
|
||
}
|
||
|
||
void micjishu::on_pushButton_4_clicked()
|
||
{
|
||
// m_michistoricalrecords->showFullScreen();
|
||
// m_michistoricalrecords->getshui();
|
||
QScrollBar *scrollBar = ui->tableWidget_3->verticalScrollBar();
|
||
|
||
|
||
// 获取当前滚动条的位置
|
||
int currentValue = scrollBar->value();
|
||
|
||
|
||
// 向下滑动的偏移量,可以根据需要调整
|
||
int offset = 100;
|
||
|
||
|
||
// 设置新的滚动条位置
|
||
scrollBar->setValue(currentValue - offset);
|
||
}
|
||
//拍照
|
||
void micjishu::on_pushButton_2_clicked()
|
||
{
|
||
|
||
if(ui->pushButton->text()=="已连接")
|
||
{
|
||
|
||
if(!ui->comboBox->currentText().isEmpty()){
|
||
|
||
m_zidingyi->exec();
|
||
m_zidingyi->focus();
|
||
timer->stop();
|
||
if(jixu==true){
|
||
ui->label_5->setHidden(false);
|
||
ui->label_5->clear();
|
||
ui->label_6->setHidden(true);
|
||
QTimer::singleShot(1,this,[=](){ m_cammer.zhuapai();});
|
||
|
||
|
||
QTimer::singleShot(500,this,[=](){
|
||
|
||
|
||
|
||
QPixmap p;
|
||
p.load(savelujing2);
|
||
// p.load("use/3_Y.png");
|
||
ui->label_5->setScaledContents(true);
|
||
ui->label_5->setPixmap(p);
|
||
|
||
|
||
|
||
|
||
QTimer::singleShot(100,this,[=](){
|
||
|
||
qDebug()<<"开始调用mic算法";
|
||
chineseNames.clear();
|
||
englishNames.clear();
|
||
micValues.clear();
|
||
explanations.clear();
|
||
positionStrList.clear();
|
||
ECVList.clear();
|
||
SList.clear();
|
||
IList.clear();
|
||
SDDList.clear();
|
||
RList.clear();
|
||
usepython();
|
||
|
||
});
|
||
});
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
}else{
|
||
QMessageBox::information(NULL, "提示", "请先选择菌属和菌种" );
|
||
}
|
||
|
||
|
||
|
||
|
||
}else{
|
||
|
||
|
||
QMessageBox::information(NULL, "提示", "请先连接相机" );
|
||
|
||
}
|
||
|
||
}
|
||
|
||
void micjishu::savezhao()
|
||
{
|
||
|
||
|
||
QString folderName;
|
||
QString timeStamp = QDate::currentDate().toString("yyyy-MM-dd");
|
||
folderName = "use/micpandu/" + timeStamp;
|
||
QDir dir(folderName);
|
||
if (!dir.exists()) {
|
||
if (!dir.mkpath(folderName)) {
|
||
qDebug() << "Failed to create directory: " << folderName;
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (ui->label_15->text().isEmpty()) {
|
||
|
||
|
||
QString timeStampFull = QTime::currentTime().toString("hh-mm-ss");
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
|
||
if (pixmap.save(savePath3)) {
|
||
qDebug() << "Saved pixmap to: " << savePath3;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap to: " << savePath3;
|
||
}
|
||
|
||
|
||
if (pixmap2.save(savePath4)) {
|
||
qDebug() << "Saved pixmap2 to: " << savePath4;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap2 to: " << savePath4;
|
||
}
|
||
|
||
if (!savePath5.isEmpty()) {
|
||
exportTableWidgetToCsv(ui->tableWidget,savePath5);
|
||
};
|
||
|
||
ui->label_7->setText(savePath5);
|
||
} else {
|
||
|
||
|
||
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
|
||
if (pixmap.save(savePath)) {
|
||
qDebug() << "Saved pixmap to: " << savePath;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap to: " << savePath;
|
||
}
|
||
|
||
|
||
if (pixmap2.save(savePath2)) {
|
||
qDebug() << "Saved pixmap2 to: " << savePath2;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap2 to: " << savePath2;
|
||
}
|
||
|
||
|
||
if (!savePath6.isEmpty()) {
|
||
exportTableWidgetToCsv(ui->tableWidget,savePath6);
|
||
};
|
||
|
||
ui->label_7->setText(savePath6);
|
||
}
|
||
|
||
}
|
||
//重新拍照
|
||
void micjishu::on_pushButton_5_clicked()
|
||
{
|
||
|
||
}
|
||
|
||
|
||
void micjishu::on_comboBox_currentTextChanged(const QString &arg1)
|
||
{
|
||
ui->comboBox_2->clear();
|
||
QString sql=QString("select name from junzhong where shuname='%1'").arg(arg1);
|
||
qDebug()<<sql;
|
||
|
||
|
||
QSqlQuery mquery;
|
||
if (!mquery.exec(sql)) {
|
||
|
||
|
||
}
|
||
while (mquery.next()) {
|
||
QVariant value = mquery.value(0);
|
||
ui->comboBox_2->addItem(value.toString());
|
||
|
||
}
|
||
}
|
||
QString micjishu::getname()
|
||
{
|
||
QString sql=QString("select usersname from users where id='%1'").arg(id6);
|
||
qDebug()<<sql;
|
||
QSqlQuery query;
|
||
|
||
if(query.exec(sql))
|
||
{
|
||
if(query.first()){
|
||
|
||
QString str1=query.value(0).toString();
|
||
qDebug()<<str1;
|
||
return str1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
qDebug()<<"没查到名字";
|
||
}
|
||
}
|
||
QString micjishu::gettime()
|
||
{
|
||
QDateTime dateTime= QDateTime::currentDateTime();//获取系统当前的时间
|
||
QString str = dateTime .toString("yyyy-MM-dd hh:mm:ss");//格式化时间
|
||
|
||
return str;
|
||
}
|
||
//保存
|
||
void micjishu::savezhao2()
|
||
{
|
||
|
||
QString folderName;
|
||
QString timeStamp = QDate::currentDate().toString("yyyy-MM-dd");
|
||
folderName = "use/micpandu/" + timeStamp;
|
||
QDir dir(folderName);
|
||
if (!dir.exists()) {
|
||
if (!dir.mkpath(folderName)) {
|
||
qDebug() << "Failed to create directory: " << folderName;
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (ui->label_15->text().isEmpty()) {
|
||
|
||
|
||
QString timeStampFull = QTime::currentTime().toString("hh-mm-ss");
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
|
||
if (pixmap.save(savePath33)) {
|
||
qDebug() << "Saved pixmap to: " << savePath33;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap to: " << savePath33;
|
||
QMessageBox::information(NULL, "提示", "原图保存失败");
|
||
}
|
||
if (pixmap2.save(savePath44)) {
|
||
qDebug() << "Saved pixmap2 to: " << savePath44;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap2 to: " << savePath44;
|
||
QMessageBox::information(NULL, "提示", "结果图保存失败");
|
||
}
|
||
if (!savePath5.isEmpty()) {
|
||
exportTableWidgetToCsv(ui->tableWidget,savePath5);
|
||
};
|
||
|
||
ui->label_7->setText(savePath5);
|
||
} else {
|
||
|
||
|
||
|
||
QPixmap pixmap = ui->label_5->pixmap();
|
||
|
||
QPixmap pixmap2 = ui->label_6->pixmap();
|
||
|
||
if (pixmap.save(savePath11)) {
|
||
qDebug() << "Saved pixmap to: " << savePath11;
|
||
} else {
|
||
qDebug() << "Failed to save pixmap to: " << savePath11;
|
||
QMessageBox::information(NULL, "提示", "原图保存失败");
|
||
}
|
||
if (pixmap2.save(savePath22)) {
|
||
qDebug() << "Saved pixmap2 to: " << savePath22;
|
||
} else {
|
||
QMessageBox::information(NULL, "提示", "结果图保存失败");
|
||
qDebug() << "Failed to save pixmap2 to: " << savePath22;
|
||
}
|
||
|
||
if (!savePath6.isEmpty()) {
|
||
exportTableWidgetToCsv(ui->tableWidget,savePath6);
|
||
};
|
||
|
||
ui->label_7->setText(savePath6);
|
||
}
|
||
|
||
}
|
||
|
||
void micjishu::on_pushButton_3_clicked()
|
||
|
||
{
|
||
|
||
}
|
||
|
||
//连接相机
|
||
void micjishu::on_pushButton_clicked()
|
||
{
|
||
|
||
|
||
ui->widget->setmic();
|
||
|
||
QTimer::singleShot(100,this,[=](){
|
||
if (!ui->widget->CameraOpen())
|
||
{
|
||
qDebug()<<"shibai";
|
||
QMessageBox::information(NULL, "提示", "连接相机失败" );
|
||
|
||
}
|
||
else{qDebug()<<"chenggog";
|
||
ui->widget->CameraStart();
|
||
|
||
|
||
ui->widget->resetStatistic();
|
||
/* ui->widget->SetExpose()*/;
|
||
// m_staticTimer.start(100);
|
||
//ui->pushButton_2->setEnabled(true);
|
||
ui->pushButton->setText("已连接");
|
||
|
||
}
|
||
|
||
SerialPort.setPortName("COM3");
|
||
// 打开串口
|
||
if(SerialPort.open(QIODevice::ReadWrite))
|
||
{
|
||
SerialPort.setBaudRate(QSerialPort::Baud9600);
|
||
SerialPort.setDataBits(QSerialPort::Data8);
|
||
SerialPort.setStopBits(QSerialPort::OneStop);
|
||
SerialPort.setParity(QSerialPort::NoParity);
|
||
SerialPort.setFlowControl(QSerialPort::NoFlowControl);
|
||
|
||
|
||
qDebug()<<"成功打开串口COM3";
|
||
QTimer::singleShot(10,this,[=](){
|
||
SerialPort.write("$1101E60");});
|
||
|
||
QTimer::singleShot(10,this,[=](){
|
||
SerialPort.write("$2204C63");});
|
||
|
||
|
||
}
|
||
else {
|
||
qDebug() << "打开 COM3 失败,原因: " << SerialPort.errorString();
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
void micjishu::on_radioButton_clicked()
|
||
{
|
||
}
|
||
|
||
void micjishu::getkai()
|
||
{
|
||
|
||
|
||
qDebug()<<"getkaimic";
|
||
ui->pushButton_2->setHidden(false);
|
||
// ui->pushButton_2->setEnabled(false);
|
||
ui->pushButton_5->setHidden(true);
|
||
ui->pushButton->setText("连接相机");
|
||
ui->pushButton->setEnabled(true);
|
||
ui->label_5->clear();
|
||
ui->label_6->clear();
|
||
// ui->tableWidget_3->clear();
|
||
|
||
ui->tableWidget_2->clear();
|
||
ui->tableWidget->clear();
|
||
// ui->widget->setHidden(true);
|
||
//ui->label_5->setHidden(false);
|
||
ui->lineEdit->clear();
|
||
ui->label_4->setText("条码信息:");
|
||
QStringList headers;
|
||
headers << "序号"<<"抗菌药物(中文名)" << "抗菌药物(英文名)" << "MIC值(μg/ml)" <<"ECV"<<"S"<<"I"<<"SDD"<<"R"<<"结果";
|
||
ui->tableWidget->setHorizontalHeaderLabels(headers);
|
||
|
||
ui->tableWidget_2->setHorizontalHeaderLabels(headers);
|
||
|
||
|
||
QPalette palette = ui->tableWidget->palette();
|
||
QColor color2 = Qt::white;
|
||
QColor color1 = QColor(229,247,255);
|
||
|
||
for (int i = 0; i < ui->tableWidget->rowCount(); ++i) {
|
||
for (int col = 0; col < ui->tableWidget->columnCount(); ++col) {
|
||
QTableWidgetItem *item = ui->tableWidget->item(i, col);
|
||
if (!item) {
|
||
item = new QTableWidgetItem();
|
||
ui->tableWidget->setItem(i, col, item);
|
||
}
|
||
if (i % 2 == 0) {
|
||
item->setBackground(QBrush(color1));
|
||
} else {
|
||
item->setBackground(QBrush(color2));
|
||
}
|
||
}
|
||
}
|
||
for (int i = 0; i < ui->tableWidget_2->rowCount(); ++i) {
|
||
for (int col = 0; col < ui->tableWidget_2->columnCount(); ++col) {
|
||
QTableWidgetItem *item = ui->tableWidget_2->item(i, col);
|
||
if (!item) {
|
||
item = new QTableWidgetItem();
|
||
ui->tableWidget_2->setItem(i, col, item);
|
||
}
|
||
if (i % 2 == 0) {
|
||
item->setBackground(QBrush(color2));
|
||
} else {
|
||
item->setBackground(QBrush(color1));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
void micjishu::getguan()
|
||
{
|
||
|
||
|
||
if( ui->widget->CameraStop()){
|
||
|
||
qDebug()<<"MICget关1";
|
||
|
||
}
|
||
if(ui->widget->CameraClose())
|
||
{
|
||
qDebug()<<"MICget关2";
|
||
}
|
||
|
||
SerialPort.write("$2101E63");
|
||
QTimer::singleShot(100,this,[=](){
|
||
SerialPort.write("$2204C63");
|
||
}
|
||
|
||
);
|
||
QTimer::singleShot(500,this,[=](){
|
||
SerialPort.close();
|
||
SerialPort4.close();
|
||
timer->stop();
|
||
}
|
||
|
||
);
|
||
}
|
||
|
||
void micjishu::on_checkBox_clicked()
|
||
{ /* if(ui->checkBox->isChecked()){SerialPort.write("$210381C");}
|
||
else{SerialPort.write("$220381F");}*/
|
||
if(ui->checkBox->isChecked()){
|
||
SerialPort.write("$110381F");
|
||
}
|
||
else {
|
||
|
||
|
||
SerialPort.write("$210381C");
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void micjishu::on_checkBox_2_clicked()
|
||
{
|
||
if(ui->checkBox_2->isChecked()){SerialPort.write("$1200A66");}
|
||
else{SerialPort.write("$2201E60");}
|
||
}
|
||
|
||
//查看
|
||
void micjishu::on_pushButton_6_clicked()
|
||
{
|
||
get();
|
||
QTimer::singleShot(100,this,[=](){ QSqlQuery query;
|
||
QString targetId = ui->label_8->text();
|
||
|
||
QString str=QString("SELECT tu FROM yaominban WHERE id = '%1'").arg(targetId);
|
||
qDebug()<<str;
|
||
query.prepare(str);
|
||
query.exec(str);
|
||
if (query.next()) {
|
||
QByteArray tuData = query.value(0).toByteArray();
|
||
// qDebug()<<tuData;
|
||
QPixmap pixmap;
|
||
if (pixmap.loadFromData(tuData)) {
|
||
//ui->label_6->setPixmap(pixmap);
|
||
emit yuan(pixmap);
|
||
m_maxtu->setWindowModality(Qt::ApplicationModal);
|
||
m_maxtu->show();
|
||
// ui->label->show();
|
||
} else {
|
||
qDebug() << "无法从数据加载图片";
|
||
}
|
||
} else {
|
||
qDebug() << "未找到对应id的记录";
|
||
}});
|
||
|
||
|
||
|
||
// emit yuan(aFile);
|
||
// m_maxtu->setWindowModality(Qt::ApplicationModal);
|
||
// m_maxtu->show();
|
||
|
||
}
|
||
|
||
QString micjishu::getLabelSubstring(QLabel *label, int start, int end)
|
||
{
|
||
QString text = label->text(); // 获取QLabel中的文本
|
||
return text.mid(start, end - start + 1); // 返回从start到end的子字符串
|
||
|
||
|
||
}
|
||
void micjishu::get()
|
||
{
|
||
QString fullText = ui->lineEdit->text();
|
||
QStringList parts = fullText.split(" "); // 按空格分割文本为字符串列表
|
||
|
||
if (parts.size() >= 5) {
|
||
// 将分割后的五个部分依次设置到对应的QLabel上
|
||
ui->label_8->setText(parts[0]);
|
||
//xiangcheng=ui->label_8->text();
|
||
ui->label_9->setText(parts[1]);
|
||
// 这里假设还有ui->label_10、ui->label_11、ui->label_12等用来显示其他部分
|
||
ui->label_10->setText(parts[2]);
|
||
// shenghao=ui->label_10->text();
|
||
ui->label_11->setText(parts[3]);
|
||
ui->label_12->setText(parts[4]);
|
||
}
|
||
}
|
||
|
||
void micjishu::on_pushButton_7_clicked()
|
||
{
|
||
|
||
|
||
}
|
||
|
||
#include <QTableWidget>
|
||
#include <QFile>
|
||
#include <QTextStream>
|
||
#include <QDebug>
|
||
|
||
// 函数用于将QTableWidget的数据导出为CSV格式的文本文件
|
||
void micjishu::exportTableWidgetToCsv(QTableWidget* tableWidget, const QString& filePath)
|
||
{
|
||
QFile file(filePath);
|
||
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||
QTextStream out(&file);
|
||
out.setEncoding(QStringConverter::Utf8);
|
||
// 写入UTF-8 BOM头(如果需要确保文件以UTF-8编码被正确识别,可根据实际情况选择是否添加)
|
||
out << "\xEF\xBB\xBF";
|
||
// 获取表头数据并写入文件
|
||
QStringList headers;
|
||
int columnCount = tableWidget->columnCount();
|
||
for (int col = 0; col < columnCount; ++col) {
|
||
QTableWidgetItem* headerItem = tableWidget->horizontalHeaderItem(col);
|
||
if (headerItem) {
|
||
headers.append(headerItem->text());
|
||
}
|
||
}
|
||
for (int col = 0; col < headers.size(); ++col) {
|
||
out << headers[col];
|
||
if (col < headers.size() - 1) {
|
||
out << ",";
|
||
}
|
||
}
|
||
out << "\n";
|
||
|
||
int rowCount = tableWidget->rowCount();
|
||
for (int row = 0; row < rowCount; ++row) {
|
||
for (int column = 0; column < columnCount; ++column) {
|
||
QTableWidgetItem* item = tableWidget->item(row, column);
|
||
if (item) {
|
||
out << item->text();
|
||
}
|
||
if (column < columnCount - 1) {
|
||
out << ",";
|
||
}
|
||
}
|
||
out << "\n";
|
||
}
|
||
file.close();
|
||
qDebug() << "TableWidget data exported to CSV file successfully.";
|
||
} else {
|
||
qDebug() << "Error opening file for writing: " << file.errorString();
|
||
}
|
||
}
|
||
void micjishu::loadCsvToTableWidget(const QString& filePath, QTableWidget* tableWidget)
|
||
{
|
||
QFile file(filePath);
|
||
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||
QTextStream in(&file);
|
||
QString line = in.readLine();
|
||
QStringList headers = line.split(",");
|
||
tableWidget->setColumnCount(headers.size());
|
||
tableWidget->setHorizontalHeaderLabels(headers);
|
||
int row = 0;
|
||
while (!in.atEnd()) {
|
||
line = in.readLine();
|
||
QStringList fields = line.split(",");
|
||
tableWidget->insertRow(row);
|
||
for (int col = 0; col < fields.size(); ++col) {
|
||
QTableWidgetItem* item = new QTableWidgetItem(fields[col]);
|
||
tableWidget->setItem(row, col, item);
|
||
}
|
||
row++;
|
||
}
|
||
file.close();
|
||
} else {
|
||
// 文件打开失败的处理
|
||
qDebug() << "Error opening file: "<< file.errorString();
|
||
}
|
||
}
|
||
void micjishu::fenge()
|
||
{
|
||
int rows = ui->tableWidget->rowCount();
|
||
int cols = ui->tableWidget->columnCount();
|
||
for (int row = 0; row < rows; ++row) {
|
||
for (int col = 0; col < cols; ++col) {
|
||
// 获取源表格中的单元格
|
||
QTableWidgetItem* sourceItem = ui->tableWidget->item(row, col);
|
||
if (sourceItem) {
|
||
// 获取单元格的数据
|
||
QVariant data = sourceItem->data(Qt::DisplayRole);
|
||
// 创建新的表格单元格用于目标表格
|
||
QTableWidgetItem* targetItem = new QTableWidgetItem(data.toString());
|
||
// 复制文本对齐方式
|
||
targetItem->setTextAlignment(sourceItem->textAlignment());
|
||
// 复制背景颜色(如果有设置)
|
||
QBrush brush = sourceItem->background();
|
||
targetItem->setBackground(brush);
|
||
// 在目标表格中设置新的单元格
|
||
ui->tableWidget_2->setItem(row, col, targetItem);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void micjishu::on_lineEdit_editingFinished()
|
||
{/*
|
||
ui->lineEdit->clear();
|
||
*/
|
||
}
|
||
|
||
|
||
void micjishu::on_pushButton_8_clicked()
|
||
{
|
||
get();
|
||
QTimer::singleShot(100,this,[=](){ QSqlQuery query;
|
||
QString targetId = ui->label_8->text();
|
||
QString str=QString("SELECT name FROM yaominban WHERE id = '%1'").arg(targetId);
|
||
qDebug()<<str;
|
||
query.prepare(str);
|
||
query.exec(str);
|
||
if (query.next()) {
|
||
|
||
QString name=query.value(0).toString();
|
||
name=name.simplified();
|
||
qDebug()<<name;
|
||
ui->lineEdit->setText(name);
|
||
ui->label_4->setText("项目名称:");
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
void micjishu::on_pushButton_9_clicked()
|
||
{
|
||
// 获取应用程序目录的父目录
|
||
QString appDir = QCoreApplication::applicationDirPath();
|
||
QDir dir(appDir);
|
||
// if (dir.cdUp()) { // 尝试返回上一级目录
|
||
// appDir = dir.absolutePath();
|
||
// } else {
|
||
// qDebug() << "无法返回上一级目录,使用原始目录";
|
||
// }
|
||
|
||
// 构建完整路径
|
||
QString initialDir = QDir::toNativeSeparators(appDir + "/use/micpandu");
|
||
qDebug() << initialDir;
|
||
// 检查目录是否存在
|
||
QDir targetDir(initialDir);
|
||
if (!targetDir.exists()) {
|
||
qDebug() << "目录不存在,使用文档目录作为替代";
|
||
initialDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
||
}
|
||
|
||
// 创建文件对话框对象
|
||
QFileDialog fileDialog;
|
||
// 设置文件对话框的标题
|
||
fileDialog.setWindowTitle("打开文件");
|
||
// 设置文件对话框的文件模式为只允许选择文件
|
||
fileDialog.setFileMode(QFileDialog::ExistingFile);
|
||
// 设置文件对话框的初始目录
|
||
fileDialog.setDirectory(initialDir);
|
||
|
||
|
||
if (fileDialog.exec() == QDialog::Accepted) {
|
||
|
||
QStringList fileNames = fileDialog.selectedFiles();
|
||
// 输出用户选择的文件路径
|
||
qDebug() << "选择的文件路径: " << fileNames.at(0);
|
||
ui->label_6->setHidden(true);
|
||
ui->label_5->setHidden(false);
|
||
|
||
ui->label_5->setPixmap(fileNames.at(0));
|
||
ui->label_5->setScaledContents(true);
|
||
int result = QMessageBox::information(NULL, "提示", "是否要将此照片进行重新判读", QMessageBox::Ok | QMessageBox::Cancel);
|
||
if (result == QMessageBox::Ok) {
|
||
|
||
if(!ui->comboBox->currentText().isEmpty()){
|
||
m_zidingyi->exec();
|
||
timer->stop();
|
||
|
||
QTimer::singleShot(100,this,[=](){
|
||
|
||
qDebug()<<"开始调用mic算法";
|
||
chineseNames.clear();
|
||
englishNames.clear();
|
||
micValues.clear();
|
||
explanations.clear();
|
||
positionStrList.clear();
|
||
savelujing2=fileNames.at(0);
|
||
usepython();
|
||
|
||
});
|
||
|
||
|
||
}else{
|
||
QMessageBox::information(NULL, "提示", "请先选择菌属和菌种" );
|
||
}
|
||
|
||
}
|
||
|
||
} else {
|
||
// 用户取消了文件选择
|
||
qDebug() << "用户取消了文件选择";
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void micjishu::on_radioButton_2_clicked()
|
||
{
|
||
// ui->stackedWidget->setCurrentIndex(1);
|
||
// m_michistoricalrecords->showFullScreen();
|
||
// m_michistoricalrecords->getshui();
|
||
|
||
}
|
||
|
||
//点击扫码
|
||
void micjishu::on_pushButton_10_clicked()
|
||
{
|
||
// foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
|
||
// {
|
||
// QSerialPort serial;
|
||
// serial.setPort(info);
|
||
// if(serial.open(QIODevice::ReadWrite))
|
||
// {
|
||
// SerialPort.setPortName("COM4");
|
||
// qDebug()<<info.portName();
|
||
// }
|
||
// }
|
||
SerialPort4.setPortName("COM4");
|
||
// 打开串口
|
||
if(SerialPort4.open(QIODevice::ReadWrite))
|
||
{
|
||
SerialPort4.setBaudRate(QSerialPort::Baud9600);
|
||
SerialPort4.setDataBits(QSerialPort::Data8);
|
||
SerialPort4.setStopBits(QSerialPort::OneStop);
|
||
SerialPort4.setParity(QSerialPort::NoParity);
|
||
SerialPort4.setFlowControl(QSerialPort::NoFlowControl);
|
||
|
||
|
||
qDebug()<<"成功打开COM4";
|
||
QTimer::singleShot(100,this,[=](){
|
||
|
||
QByteArray hexData = QByteArray::fromHex("16 54 0D");
|
||
SerialPort4.write(hexData);
|
||
// QTimer::singleShot(100,this,[=](){
|
||
// QByteArray receivedHexData = SerialPort.readAll();
|
||
// ui->lineEdit->setText(receivedHexData);
|
||
// qDebug()<<receivedHexData;});
|
||
|
||
|
||
// SerialPort.write("16 54 0D");
|
||
// QTimer::singleShot(100,this,[=](){
|
||
// QString str=SerialPort.readAll();
|
||
// ui->lineEdit->setText(str);
|
||
// qDebug()<<str;});
|
||
// });
|
||
|
||
|
||
// 将定时器的 timeout 信号连接到自定义的槽函数 timeoutHandler
|
||
connect(timer, &QTimer::timeout, this, [=](){
|
||
QByteArray receivedHexData = SerialPort4.readAll();
|
||
|
||
qDebug()<<receivedHexData;
|
||
if(receivedHexData!="")
|
||
{
|
||
ui->lineEdit->setText(receivedHexData);
|
||
timer->stop();
|
||
receivedHexData="";
|
||
}
|
||
|
||
});
|
||
// 启动定时器,设置超时时间为 1000 毫秒(即 1 秒)
|
||
timer->start(1000);
|
||
});
|
||
}
|
||
else {
|
||
qDebug() << "打开 COM4 失败,原因: " << SerialPort4.errorString();
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
void micjishu::on_pushButton_11_clicked()
|
||
{
|
||
QScrollBar *scrollBar = ui->tableWidget_3->verticalScrollBar();
|
||
|
||
|
||
// 获取当前滚动条的位置
|
||
int currentValue = scrollBar->value();
|
||
|
||
|
||
// 向下滑动的偏移量,可以根据需要调整
|
||
int offset = 100;
|
||
|
||
|
||
// 设置新的滚动条位置
|
||
scrollBar->setValue(currentValue + offset);
|
||
}
|
||
|
||
|
||
void micjishu::on_pushButton_12_clicked()
|
||
{
|
||
m_pp->show();
|
||
if(ui->label_15->text().isEmpty()){
|
||
emit print(savePath5);
|
||
}else{
|
||
emit print(savePath6);
|
||
}
|
||
|
||
}
|
||
|