#include "historytask.h" #include "ui_historytask.h" #include namespace Ripples { HistoryTask::HistoryTask(QWidget *parent): QWidget(parent), ui(new Ui::HistoryTask), m_weights({1, 7, 3, 2, 2, 2, 2, 2}), m_model(new QStandardItemModel(this)) { ui->setupUi(this); // 设置模型有8列 m_model->setColumnCount(8); // 设置表头样式 ui->tableView->horizontalHeader()->setStyleSheet(R"( QHeaderView::section { background-color: #4682B4; color: white; font-weight: bold; font-size: 14px; padding: 4px; border: 1px solid #dcdcdc; } )"); // 表头名称 const QString headers[] { "序号", "工程名称", "创建时间", "预览", "查看报告", "保存", "复制", "删除", }; // 设置表头 int i = 0; for (auto& header: headers){ m_model->setHeaderData(i, Qt::Horizontal, header); i++; } ui->tableView->verticalHeader()->setDefaultSectionSize(60); // 设置表格高度固定为60像素 ui->horizontalLayout->setContentsMargins(0, 0, 0, 0); ui->tableView->verticalHeader()->setVisible(false); // 禁用列表头 ui->tableView->resize(this->width(), this->height()); ui->tableView->setStyleSheet("QTableView {alignment: AlignCenter;}"); ui->tableView->setModel(m_model); // 取消编辑和焦点功能 ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->tableView->setSelectionMode(QAbstractItemView::NoSelection); addItem("p1", "123"); addItem("p2", "456"); addItem("p3", "789"); addItem("p4", "101112"); addItem("p5", "745345"); addItem("p6", "104545"); addItem("p5", "745345"); addItem("p6", "104545"); addItem("p5", "745345"); addItem("p6", "104545"); } HistoryTask::~HistoryTask() { delete ui; } void Ripples::HistoryTask::autoResize(int totalWidth) { // 计算每一列的占比 int weightSum = 0; for (int& w: m_weights) weightSum += w; if (weightSum <= 0){ return; } for (int col = 0; col < m_weights.size(); ++col) { int w = totalWidth * m_weights[col] / weightSum; ui->tableView->setColumnWidth(col, w); ui->tableView->horizontalHeader()->setSectionResizeMode(col, QHeaderView::Fixed); } } void Ripples::HistoryTask::addItem(const QString& name, const QString& path) { int row = m_model->rowCount(); setProjectIndex(row); setProjectNameAndPath(row, name, path); // 获取当前日期时间 QDateTime currentDateTime = QDateTime::currentDateTime(); // 格式化为字符串 QString time = currentDateTime.toString("yyyy-MM-dd hh:mm:ss"); setCreateTime(row, time); setFunctionIcon(row); } void HistoryTask::deleteItem(int row, int column) { m_model->removeRow(row); for (int i = row; i < m_model->rowCount(); ++i){ m_model->setData(m_model->index(i, 0), i+1); } } void Ripples::HistoryTask::setProjectIndex(int row) { auto* item = new QStandardItem(QString::number(row + 1)); // 设置字体 QFont font; font.setBold(true); font.setPointSize(15); item->setFont(font); item->setTextAlignment(Qt::AlignCenter); m_model->setItem(row, 0, item); } void HistoryTask::setProjectNameAndPath(int row, const QString& name, const QString& path) { QLabel* label = new QLabel(this); // 设置两行文字,上行文字为项目名字,下行文字为项目所在路径 label->setText(QString( "
%1
" "
%2
") .arg(name) .arg(path)); QModelIndex index = m_model->index(row, 1); ui->tableView->setIndexWidget(index, label); } void Ripples::HistoryTask::setCreateTime(int row, const QString& time) { auto* item = new QStandardItem(time); // 设置字体 QFont font; font.setPointSize(12); item->setFont(font); item->setTextAlignment(Qt::AlignCenter); m_model->setItem(row, 2, item); } void Ripples::HistoryTask::setFunctionIcon(int row) { QStringList pathList = { ":/预览.png", ":/查看报告.png", ":/保存.png", ":/复制.png", ":/删除.png" }; int i = 3; for(auto&& icon : pathList) { QPushButton* button = new QPushButton(this); button->setIcon(QIcon(icon)); // 设置图标 button->setIconSize(QSize(35, 35)); // 设置图标大小为35x35像素 // 设置按钮样式 button->setStyleSheet( "QPushButton {" " border: none" "}" "QPushButton:pressed {" " padding-left: 2px;" " padding-top: 2px;" "}" ); QModelIndex index = m_model->index(row, i++); ui->tableView->setIndexWidget(index, button); connect(button, &QPushButton::clicked, this, [index, this](){ if(m_model->rowCount() == 1) m_lastModelItemFlag = true; else m_lastModelItemFlag = false; if(index.column() == 3) emit previewSignal(index.row(), index.column()); else if(index.column() == 4) emit checkSignal(index.row(), index.column()); else if(index.column() == 5) emit saveSignal(index.row(), index.column()); else if(index.column() == 6) emit copySignal(index.row(), index.column()); else if(index.column() == 7) deleteItem(index.row(), index.column()); }); } } void HistoryTask::resizeEvent(QResizeEvent* event) { QWidget::resizeEvent(event); QSize newSize = event->size(); autoResize(newSize.width()); } } // namespace Ripples