#include "michistoricalrecords.h" #include "ui_michistoricalrecords.h" #include #include #include #include #include #include michistoricalrecords::michistoricalrecords(QWidget *parent) : QWidget(parent), ui(new Ui::michistoricalrecords) { ui->setupUi(this); ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems); ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection); ui->tableView->setAlternatingRowColors(true); model = new CheckBoxTableModel(this); model->setTable("micjishu");//鎵撳紑鏁版嵁搴撲腑鍚嶄负鈥溾€濈殑琛? model->select(); ui->tableView->setModel(model); ui->tableView->show(); theSelection=new QItemSelectionModel(model);//鍏宠仈閫夋嫨妯″瀷 // 设置第一列的复选框初始状态 for (int i = 0; i < model->rowCount(); ++i) { QModelIndex index = model->index(i, 0); model->setData(index, Qt::Unchecked, Qt::CheckStateRole); } // 连接信号槽,当复选框状态改变时选中整行 connect(model, &CheckBoxTableModel::dataChanged, this, &michistoricalrecords::onDataChanged); // // 设置选中行的背景颜色为浅蓝色,即使失去焦点也保持颜色 // ui->tableView->setStyleSheet( // "QTableView::item:selected {" // " background-color: lightblue;" // 选中项的背景颜色 // " color: black;" // 选中项的文字颜色 // "}" // "QTableView {" // " selection-background-color: lightblue;" // 选中行的背景颜色 // " selection-color: black;" // 选中行的文字颜色 // "}" // ); // 启用整行选择模式,允许多行选中 ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableView->setSelectionMode(QAbstractItemView::MultiSelection); // 连接点击信号 connect(ui->tableView, &QTableView::clicked, this, &michistoricalrecords::onTableViewClicked); // 设置自定义表头 header = new CheckBoxHeader(Qt::Horizontal, ui->tableView); ui->tableView->setHorizontalHeader(header); connect(header, &CheckBoxHeader::checkStateChanged, this, &michistoricalrecords::onHeaderCheckStateChanged); //theSelection褰撳墠椤瑰彉鍖栨椂瑙﹀彂currentChanged淇″彿 connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)), this,SLOT(on_currentChanged(QModelIndex,QModelIndex))); ui->tableView->setSelectionModel(theSelection); //璁剧疆閫夋嫨妯″瀷 ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 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))); connect(this, SIGNAL(lujing(QString,QString)),m_maxtu, SLOT(getlujing(QString,QString))); ui->pushButton->setFixedSize(73,34); ui->pushButton_2->setFixedSize(73,34); ui->pushButton_4->setFixedSize(73,34); ui->lineEdit_3->setFixedSize(117,25); ui->lineEdit_4->setFixedSize(117,25); ui->frame->setFixedSize(170,37); ui->frame_2->setFixedSize(170,37); ui->comboBox->setFixedSize(170,37); ui->comboBox_2->setFixedSize(170,37); ui->comboBox_3->setFixedSize(170,37); ui->tableView->setItemDelegateForColumn(6, &delegate); ui->tableView->setItemDelegateForColumn(7, &delegate); ui->tableView->setShowGrid(false); ui-> tableView->verticalHeader()->setVisible(false); //ui->widget_3->setFixedHeight(80); QTimer *timer; timer = new QTimer(this); connect(timer, &QTimer::timeout, this, [=](){ QDateTime dateTime= QDateTime::currentDateTime();//鑾峰彇绯荤粺褰撳墠鐨勬椂闂? QString str = dateTime .toString("yyyy-MM-dd hh:mm:ss");//鏍煎紡鍖栨椂闂? // ui->label_7->setText(str); }); timer->start(1000); this->setWindowFlags(Qt::FramelessWindowHint); // 闅愯棌鏍囬鏍? ui->tableView->setItemDelegateForColumn(9,delegate2); connect(delegate2, &ButtonDelegate5::editButtonClicked, this, &michistoricalrecords::chakan); connect(delegate2, &ButtonDelegate5::deleteButtonClicked, this, &michistoricalrecords::shanchu); m_look=new look; connect(this, &michistoricalrecords::cha, m_look, &look::getcha); // connect(this, SIGNAL(cha(QString)), m_look, SLOT(getcha(QString))); getshui(); ui->tableView->setShowGrid(false); ui->tableView->setFixedSize(1730,760); ui->tableView->setFixedWidth(1730); ui->tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(ui->tableView, &QTableView::clicked, this, &michistoricalrecords::onCellClicked); m_date=new date; connect(m_date,SIGNAL(kaishi(QString)), this, SLOT(getkaishi(QString))); m_datee=new datee; connect(m_datee,SIGNAL(kaishi(QString)), this, SLOT(getkaishii(QString))); QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this); //设置阴影距离 shadow->setOffset(0, 0); //设置阴影颜色 shadow->setColor(QColor(214, 214, 214)); //设置阴影圆角 shadow->setBlurRadius(30); //给嵌套QWidget设置阴影 ui->frame_3->setFixedSize(1755,907); ui->frame_3->setGraphicsEffect(shadow); CenteredItemDelegate* delegate = new CenteredItemDelegate(); ui->tableView->setItemDelegate(delegate); for (int i=1;i<=10 ;i++ ) { ui->tableView->setColumnWidth(i,183); } ui->tableView->setColumnWidth(0,80); ui->tableView->columnWidth(173); ui->tableView->horizontalHeader()->setFixedHeight(40); connect(m_maxtu,&maxtu::guanmeng,this,[=](){mask_window.close();}); connect(m_look,&look::guanmeng,this,[=](){mask_window.close();}); ui->lineEdit_2->setFixedSize(56,32); QWidget *buttonContainer = new QWidget(this); buttonLayout = new QHBoxLayout(buttonContainer); ui->scrollArea ->setWidget(buttonContainer); ui-> scrollArea->setWidgetResizable(true); buttonGroup = new QButtonGroup(this); totalPages = (model->rowCount() + recordsPerPage - 1) / recordsPerPage; ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); updateButtons(); } michistoricalrecords::~michistoricalrecords() { delete ui; } void michistoricalrecords::onDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { if (topLeft.column() == 0) { bool checked = model->data(topLeft, Qt::CheckStateRole).toBool(); if (checked) { // 选中整行 ui->tableView->selectRow(topLeft.row()); } else { // 取消当前行的选中状态 QItemSelectionModel *selectionModel = ui->tableView->selectionModel(); selectionModel->select(topLeft, QItemSelectionModel::Deselect | QItemSelectionModel::Rows); } } } void michistoricalrecords::onTableViewClicked(const QModelIndex &index) { // 如果点击的是第一列,直接返回 if (index.column() == 0) { return; } // 获取复选框索引 QModelIndex checkBoxIndex = model->index(index.row(), 0); // 切换复选框状态 bool isChecked = model->data(checkBoxIndex, Qt::CheckStateRole).toBool(); model->setData(checkBoxIndex, !isChecked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); // 确保整行选择状态与复选框状态一致 if (!isChecked) { ui->tableView->selectRow(index.row()); } else { ui->tableView->selectionModel()->select(index, QItemSelectionModel::Deselect | QItemSelectionModel::Rows); } } void michistoricalrecords::onHeaderCheckStateChanged(Qt::CheckState state) { model->setAllCheckState(state); if (state == Qt::Checked) { for (int i = 0; i < model->rowCount(); ++i) { ui->tableView->selectRow(i); ui->tableView->selectAll(); } } else { ui->tableView->clearSelection(); } } void michistoricalrecords::getshuaxin() { qDebug()<<"鍒锋柊浜?"; QTimer::singleShot(100,this,[=](){shuaxin();}) ; } void michistoricalrecords::chakan(const QModelIndex& index) { QAbstractItemModel* model = ui->tableView->model(); if (model) { int row = index.row(); int col = index.column(); QVariant data = model->data(index); if (data.isValid()) { QString dataStr = data.toString(); emit cha(dataStr); qDebug() << "缂栬緫鎸夐挳琚偣鍑伙紝琛?: " << row << " 鍒?: " << col << " 鏁版嵁: " << dataStr; } else { qDebug() << "缂栬緫鎸夐挳琚偣鍑伙紝琛?: " << row << " 鍒?: " << col << " 瀵瑰簲鍗曞厓鏍兼棤鏁版嵁"; } } mask_window.setWindowOpacity(0.2); //设置窗体的背景色,这里的百分比就是透明度 mask_window.setStyleSheet("background-color: black;"); mask_window.setGeometry(0, 0, 1920,1080); //获取父窗体的几何形状设置当前窗口 mask_window.setWindowFlags(Qt::FramelessWindowHint); // 隐藏标题栏 //对话框 mask_window.show(); m_look->show(); } void michistoricalrecords::getshui() { ui->comboBox->clear(); ui->comboBox_2->clear(); ui->comboBox_3->clear(); QString queryString = QString("SELECT name FROM junshu"); QSqlQuery mquery; if (!mquery.exec(queryString)) { } while (mquery.next()) { QVariant value = mquery.value(0); QString str=value.toString(); ui->comboBox->addItem(str); } QString queryString2 = QString("SELECT id FROM junshu"); QSqlQuery mquery2; if (!mquery2.exec(queryString2)) { } while (mquery2.next()) { QVariant value = mquery2.value(0); QString str=value.toString(); ui->comboBox_3->addItem(str); } } void michistoricalrecords::shanchu(const QModelIndex& index) { int result = QMessageBox::information(NULL, "提示", "确定要删除本行内容吗", QMessageBox::Ok | QMessageBox::Cancel); if (result == QMessageBox::Ok) { qDebug() << "删除按钮被点击,行: " << index.row() << " 列: " << index.column(); if (model->removeRow(index.row())) { if (model->submitAll()) { shuaxin(); // 重置视图,强制刷新界面显示 } else { } } else { } } } void michistoricalrecords::shuaxin() { model->setTable("micjishu"); ui->tableView->setModel(model); model->select(); model->setHeaderData(0, Qt::Horizontal, "序号"); model->setHeaderData(1, Qt::Horizontal, "项目名称"); model->setHeaderData(2, Qt::Horizontal, "药敏板序列号"); model->setHeaderData(3, Qt::Horizontal, "生产批号"); model->setHeaderData(4, Qt::Horizontal, "菌属"); model->setHeaderData(5, Qt::Horizontal, "菌种"); model->setHeaderData(6, Qt::Horizontal, "原始图片"); model->setHeaderData(7, Qt::Horizontal, "判读图片"); model->setHeaderData(8, Qt::Horizontal, "时间"); model->setHeaderData(9, Qt::Horizontal, "判读结果"); for (int i=0;i<=model->rowCount() ;i++ ) { ui->tableView->setRowHeight(i,40); } for (int i=1;i<=10 ;i++ ) { ui->tableView->setColumnWidth(i,183); } ui->tableView->setColumnWidth(0,80); // 计算总页数并更新分页按钮 totalPages = (model->rowCount() + recordsPerPage - 1) / recordsPerPage; QString s = "共" + QString::number(totalPages) + "页"; ui->label_7->setText(s); } void michistoricalrecords::on_pushButton_clicked() { if (ui->lineEdit_3->text() == "" || ui->lineEdit_4->text() == "") { // 如果时间输入框为空,执行原来的查询逻辑 QSqlQuery query; QString str = QString("SELECT * FROM micjishu WHERE xiangcheng LIKE '%1%' AND junshu LIKE '%2%' AND junzhong LIKE '%3%'") .arg(ui->comboBox_3->currentText()) .arg(ui->comboBox->currentText()) .arg(ui->comboBox_2->currentText()); qDebug() << str; query.prepare(str); if (query.exec()) { model->setQuery(query); // 使用已有的model,避免创建新的QSqlQueryModel ui->tableView->setModel(model); ui->tableView->show(); model->setHeaderData(0, Qt::Horizontal, "序号"); model->setHeaderData(1, Qt::Horizontal, "项目名称"); model->setHeaderData(2, Qt::Horizontal, "药敏板序列号"); model->setHeaderData(3, Qt::Horizontal, "生产批号"); model->setHeaderData(4, Qt::Horizontal, "菌属"); model->setHeaderData(5, Qt::Horizontal, "菌种"); model->setHeaderData(6, Qt::Horizontal, "原始图片"); model->setHeaderData(7, Qt::Horizontal, "判读图片"); model->setHeaderData(8, Qt::Horizontal, "时间"); model->setHeaderData(9, Qt::Horizontal, "判读结果"); // 计算总页数并更新分页按钮 totalPages = (model->rowCount() + recordsPerPage - 1) / recordsPerPage; QString s = "共" + QString::number(totalPages) + "页"; ui->label_7->setText(s); for (int i = 0; i <= model->rowCount(); i++) { ui->tableView->setRowHeight(i, 40); } updateButtons(); } else { qDebug() << "Query failed:" << query.lastError().text(); } } else { // 如果时间输入框不为空,增加时间段内的检索条件 QSqlQuery query; QString str = QString("SELECT * FROM micjishu WHERE xiangcheng LIKE '%1%' AND junshu LIKE '%2%' AND junzhong LIKE '%3%' AND time BETWEEN '%4' AND '%5'") .arg(ui->comboBox_3->currentText()) .arg(ui->comboBox->currentText()) .arg(ui->comboBox_2->currentText()) .arg(ui->lineEdit_4->text()) // 开始时间 .arg(ui->lineEdit_3->text()); // 结束时间 qDebug() << str; query.prepare(str); if (query.exec()) { model->setQuery(query); // 使用已有的model,避免创建新的QSqlQueryModel ui->tableView->setModel(model); ui->tableView->show(); model->setHeaderData(0, Qt::Horizontal, "序号"); model->setHeaderData(1, Qt::Horizontal, "项目名称"); model->setHeaderData(2, Qt::Horizontal, "药敏板序列号"); model->setHeaderData(3, Qt::Horizontal, "生产批号"); model->setHeaderData(4, Qt::Horizontal, "菌属"); model->setHeaderData(5, Qt::Horizontal, "菌种"); model->setHeaderData(6, Qt::Horizontal, "原始图片"); model->setHeaderData(7, Qt::Horizontal, "判读图片"); model->setHeaderData(8, Qt::Horizontal, "时间"); model->setHeaderData(9, Qt::Horizontal, "判读结果"); // 计算总页数并更新分页按钮 totalPages = (model->rowCount() + recordsPerPage - 1) / recordsPerPage; QString s = "共" + QString::number(totalPages) + "页"; ui->label_7->setText(s); for (int i = 0; i <= model->rowCount(); i++) { ui->tableView->setRowHeight(i, 40); } updateButtons(); } else { qDebug() << "Query failed:" << query.lastError().text(); } } } //导出 void michistoricalrecords::on_pushButton_2_clicked() { // 安全检查 if (!this || !ui || !ui->tableView) { qDebug() << "UI components not initialized"; return; } QStringList customHeaders = { "序号", "项目名称", "药敏板序号", "生产批号", "菌属", "菌种", "氟康唑"," ", "伊曲康唑"," ", "伏立康唑"," ", "泊沙康唑"," ", "艾沙康唑"," ", "卡泊芬净"," ", "米卡芬净", " ","氟胞嘧啶"," ", "阿尼芬净"," ", "两性霉素B"," ", "时间", }; QAbstractItemModel *model = ui->tableView->model(); if (!model) { QMessageBox::warning(this, "导出失败", "表格模型未初始化"); return; } QItemSelectionModel *selectionModel = ui->tableView->selectionModel(); QModelIndexList selectedRows = selectionModel->selectedRows(); if (selectedRows.isEmpty()) { QMessageBox::warning(this, "导出失败", "未选中任何行。"); return; } QString filePath = QFileDialog::getSaveFileName(this, "Export to CSV", "", "CSV Files (*.csv)"); if (filePath.isEmpty()) { return; } QFile file(filePath); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this, "导出失败", "无法创建文件: " + file.errorString()); return; } QTextStream out(&file); out.setEncoding(QStringConverter::Utf8); out.setGenerateByteOrderMark(true); // 写入表头 out << customHeaders.join(",") << "\n"; // 处理数据行 for (const QModelIndex &index : selectedRows) { if (!index.isValid()) continue; int row = index.row(); QStringList dataRow; QString ninthColumnData; for (int col = 0; col < model->columnCount(); ++col) { if (col == 6 || col == 7) { // 跳过第七列和第八列 continue; } else if (col == 8) { // 处理第九列数据 QModelIndex currentIndex = model->index(row, col); if (!currentIndex.isValid()) continue; QVariant data = model->data(currentIndex, Qt::DisplayRole); ninthColumnData = data.toString().replace(",", ";"); } else if (col == 9) { // 处理CSV文件 QModelIndex currentIndex = model->index(row, col); if (!currentIndex.isValid()) continue; QString csvPath = model->data(currentIndex, Qt::DisplayRole).toString(); if (csvPath.isEmpty()) { file.close(); QFile::remove(filePath); // 删除已创建的部分文件 QMessageBox::warning(this, "导出失败", "第" + QString::number(row + 1) + "行的CSV文件为空,导出失败"); return; // 直接终止导出过程 } QFile csvFile(csvPath); if (!csvFile.open(QIODevice::ReadOnly | QIODevice::Text)) { file.close(); QFile::remove(filePath); // 删除已创建的部分文件 QMessageBox::warning(this, "导出失败", "第" + QString::number(row + 1) + "行的CSV文件读取失败,导出失败"); return; // 直接终止导出过程 } QTextStream csvIn(&csvFile); csvIn.setEncoding(QStringConverter::Utf8); QStringList lines = csvIn.readAll().split('\n'); csvFile.close(); // for (int lineIdx = 1; lineIdx < lines.size() && (lineIdx - 1) < 10; ++lineIdx) { // QStringList csvCols = lines[lineIdx].split(','); // QString col4 = csvCols.size() > 3 ? csvCols[3] : ""; // QString col5 = csvCols.size() > 4 ? csvCols[4] : ""; // dataRow.append(QString("%1(%2)").arg(col4).arg(col5)); // } // while (dataRow.size() - col < 10) { // dataRow.append(""); // } // } // else { // QModelIndex currentIndex = model->index(row, col); // if (!currentIndex.isValid()) continue; // QVariant data = model->data(currentIndex, Qt::DisplayRole); // dataRow.append(data.toString().replace(",", ";")); // } // } // dataRow.insert(16, ninthColumnData); // while (dataRow.size() < customHeaders.count()) { // dataRow.append(""); // } // out << dataRow.join(",") << "\n"; // } // file.close(); // QMessageBox::information(this, "导出成功", "数据已成功导出到: " + filePath); // 修改这里:将 col4 和 col5 分开存储,各占一个单元格 for (int lineIdx = 1; lineIdx < lines.size() && (lineIdx - 1) < 10; ++lineIdx) { QStringList csvCols = lines[lineIdx].split(','); QString col4 = csvCols.size() > 3 ? csvCols[3] : ""; QString col5 = csvCols.size() > 4 ? csvCols[4] : ""; // 先添加 col4 dataRow.append(col4); // 然后添加 col5 dataRow.append(col5); } // 确保有足够的空单元格 while (dataRow.size() - col < 20) { // 10对(col4,col5)需要20个单元格 dataRow.append(""); } } else { QModelIndex currentIndex = model->index(row, col); if (!currentIndex.isValid()) continue; QVariant data = model->data(currentIndex, Qt::DisplayRole); dataRow.append(data.toString().replace(",", ";")); } } dataRow.insert(26, ninthColumnData); while (dataRow.size() < customHeaders.count()) { dataRow.append(""); } out << dataRow.join(",") << "\n"; } file.close(); QMessageBox::information(this, "导出成功", "数据已成功导出到: " + filePath); } void michistoricalrecords::on_pushButton_4_clicked() { shuaxin(); // 重新计算总页数 totalPages = (model->rowCount() + recordsPerPage - 1) / recordsPerPage; updatePage(); updateButtons(); } void michistoricalrecords::onCellClicked(const QModelIndex &index) { if (index.column() == 6 || index.column() == 7) { int curRecNo = index.row(); QSqlRecord curRec = model->record(curRecNo); QString yuanshi = curRec.value("yuanshi").toString(); QString jieguo = curRec.value("jieguo").toString(); emit lujing(yuanshi, jieguo); mask_window.setWindowOpacity(0.2); mask_window.setStyleSheet("background-color: black;"); mask_window.setGeometry(0, 0, 1920, 1080); mask_window.setWindowFlags(Qt::FramelessWindowHint); mask_window.show(); m_maxtu->setWindowModality(Qt::ApplicationModal); m_maxtu->show(); } } void michistoricalrecords::on_pushButton_3_clicked() { emit fanhui(); } void michistoricalrecords::on_comboBox_currentTextChanged(const QString &arg1) { ui->comboBox_2->clear(); QString sql=QString("select name from junzhong where shuname='%1'").arg(arg1); qDebug()<comboBox_2->addItem(value.toString()); } } void michistoricalrecords::on_toolButton_3_clicked() { } void michistoricalrecords::on_toolButton_clicked() { int result = QMessageBox::information(NULL, "提示", "确定要退出运行吗", QMessageBox::Ok| QMessageBox::Cancel); if (result == QMessageBox::Ok) { emit guan2(); emit tuichu2(); QTimer::singleShot(500,this,[=](){qApp->quit(); }) ; } } void michistoricalrecords::on_pushButton_5_clicked() { m_date->move(880,180); m_date->exec(); } void michistoricalrecords::on_pushButton_6_clicked() { m_datee->move(880,180); m_datee->exec(); } void michistoricalrecords::getkaishi(QString str) { ui->lineEdit_4->setText(str); } void michistoricalrecords::getkaishii(QString str) { ui->lineEdit_3->setText(str); } void michistoricalrecords::updatePage() { if (model) { int startIndex = (currentPage - 1) * recordsPerPage; int endIndex = std::min(startIndex + recordsPerPage, model->rowCount()); for (int i = 0; i < model->rowCount(); ++i) { ui->tableView->setRowHidden(i, i < startIndex || i >= endIndex); } for (int i=0;i<=model->rowCount() ;i++ ) { ui->tableView->setRowHeight(i,40); } for (int i=1;i<=10 ;i++ ) { ui->tableView->setColumnWidth(i,183); } ui->tableView->setColumnWidth(0,80); } } void michistoricalrecords::updateButtons() { QLayoutItem *item; while ((item = buttonLayout->takeAt(0)) != nullptr) { delete item->widget(); delete item; } int startPage = std::max(1, currentPage - 4); // 计算起始页 int endPage = std::min(totalPages, startPage + 9); // 计算结束页 // 确保当前页在第五个位置 if (endPage - startPage < 9 && currentPage - 4 > 0) { startPage = std::max(1, currentPage - (9 - (endPage - startPage))); endPage = std::min(totalPages, startPage + 9); } int buttonCount = 0; // 用于记录按钮个数 for (int i = startPage; i <= endPage; i++) { QPushButton *button = new QPushButton(QString::number(i), this); buttonLayout->addWidget(button); buttonGroup->addButton(button, i); // 设置当前页按钮样式 if (i == currentPage) { button->setStyleSheet("QPushButton {color:rgb(0, 170, 255); }"); } else { button->setStyleSheet(""); } buttonCount++; // 连接按钮点击信号到槽函数 connect(button, &QPushButton::clicked, this, [=]() { currentPage = i; updatePage(); updateButtons(); // 更新按钮样式 }); } // 根据按钮个数设置 scrollArea 的宽度 if (buttonCount >= 1 && buttonCount <= 10) { ui->scrollArea->setFixedWidth(buttonCount * 40); } } void michistoricalrecords::onPageButtonClicked(int id) { currentPage = id; qDebug()< 1) { currentPage--; updatePage(); updateButtons(); } else { qDebug() << "已经是第一页,无法继续上一页操作"; } } void michistoricalrecords::on_pushButton_9_clicked() { if (currentPage < totalPages - 1) { currentPage++; updatePage(); updateButtons(); } else { qDebug() << "已经是最后一页,无法继续下一页操作"; } } void michistoricalrecords::on_pushButton_11_clicked() { bool ok; int page = ui->lineEdit_2->text().toInt(&ok); if (ok) { // 页码从 1 开始,所以减 1 转换为从 0 开始的索引 int targetPage = page; if (targetPage >= 0 && targetPage <= totalPages) { currentPage = targetPage; updatePage(); updateButtons(); } else { qDebug() << "输入的页码超出范围,请输入 1 到 " << totalPages << " 之间的页码"; } } else { qDebug() << "输入的页码不合法,请输入一个有效的数字"; } }