153 lines
5.0 KiB
C++
Raw Normal View History

2025-07-17 08:39:15 +08:00
#include "printpage.h"
#include "ui_printpage.h"
printpage::printpage(QWidget *parent)
: QWidget(parent)
, ui(new Ui::printpage)
{
ui->setupUi(this);
}
printpage::~printpage()
{
delete ui;
}
void printpage::on_pushButton_clicked()
{
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer, this);
if (dialog.exec() == QDialog::Accepted) {
printWidget(&printer); // 打印页面内容
}
}
// 打印文本
void printpage::printWidget(QPrinter *printer) {
QPainter painter(printer);
// 1. 获取打印机的实际可打印区域(去除边距)
QRectF pageRect = printer->pageRect(QPrinter::DevicePixel);
// 2. 加载要打印的内容例如QPixmap或绘制内容
QPixmap content = ui->frame->grab(); // 如果是整个窗口
// 3. 缩放内容以适应页面
painter.drawPixmap(pageRect, content, content.rect());
painter.end();
this->close();
}
// void printpage::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();
// }
// for (int i=0;i<=ui->tableWidget->rowCount() ;i++ ) {
// ui->tableWidget->setRowHeight(i,31);}
// for (int i=0;i<=ui->tableWidget->columnCount() ;i++ ) {
// ui->tableWidget->setColumnWidth(i,119);}
// }
void printpage::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(",");
// 自定义标题
QStringList customHeaders;
customHeaders << "序号" << "抗菌药物" <<"MIC值μg/mL"<< "结果" << "ECV" << "S" << "I" << "SDD" << "R";
// 设置列数(使用自定义标题的数量)
tableWidget->setColumnCount(customHeaders.size());
tableWidget->setHorizontalHeaderLabels(customHeaders);
int row = 0;
while (!in.atEnd()) {
line = in.readLine();
QStringList fields = line.split(",");
tableWidget->insertRow(row);
for (int col = 0; col < customHeaders.size(); ++col) {
if (col == 2) {
QString value = (fields.size() > 9) ? fields[9] : "";
QTableWidgetItem* item = new QTableWidgetItem(value);
item->setTextAlignment(Qt::AlignCenter);
tableWidget->setItem(row, 3, item);
}
else if (col == 3) {
QString value = (fields.size() > 3) ? fields[3] : "";
QTableWidgetItem* item = new QTableWidgetItem(value);
item->setTextAlignment(Qt::AlignCenter);
tableWidget->setItem(row, 2, item);
}
else if (col == 9) {
QString value = (fields.size() > 2) ? fields[2] : "";
QTableWidgetItem* item = new QTableWidgetItem(value);
item->setTextAlignment(Qt::AlignCenter);
tableWidget->setItem(row, col, item);
}
// 其他列正常显示
else {
QString value = (col < fields.size()) ? fields[col] : "";
QTableWidgetItem* item = new QTableWidgetItem(value);
item->setTextAlignment(Qt::AlignCenter);
tableWidget->setItem(row, col, item);
}
}
row++;
}
file.close();
tableWidget->setColumnHidden(9, true); // 如果需要完全隐藏列
// 设置行高和列宽
for (int i = 0; i < tableWidget->rowCount(); i++) {
tableWidget->setRowHeight(i, 30);
}
for (int i = 0; i < tableWidget->columnCount(); i++) {
tableWidget->setColumnWidth(i, 132);
}
} else {
qDebug() << "Error opening file: " << file.errorString();
}
}
void printpage::getprint(QString s)
{
ui->tableWidget->clear();
loadCsvToTableWidget(s, ui->tableWidget);
qDebug()<<"查到了";
}