#include "mainwindow.h" #include #include "lib/qcustomplot.h" #include "./ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) , thread_read(new threadRead), thread_chart(new ThreadChart),thread_polt(new threadPoltChart){ ui->setupUi(this); this->setWindowTitle("日志查询工具"); // 创建版本号标签 m_versionLabel = new QLabel(tr("v1.2.0"), this); // 将标签添加到状态栏的右端 ui->statusbar->addPermanentWidget(m_versionLabel); connect(thread_read, &threadRead::clearCombo, this, &MainWindow::clearCombo); connect(thread_read, &threadRead::showStatusbar, this, &MainWindow::showStatusbar); connect(thread_read, &threadRead::setBeginTime, this, &MainWindow::setBeginTime); connect(thread_read, &threadRead::setEndTime, this, &MainWindow::setEndTime); connect(thread_read, &threadRead::addCombo, this, &MainWindow::addCombo); connect(thread_read, &threadRead::setProgressBar, this, &MainWindow::setProgressBar); connect(thread_read, &threadRead::closeProg, this, &MainWindow::closeProg); //chart connect(thread_chart, &ThreadChart::setChartView, this, &MainWindow::setChartView); connect(thread_chart, &ThreadChart::setWidget, this, &MainWindow::setWidget); connect(thread_chart, &ThreadChart::setProgressBar, this, &MainWindow::setProgressBar); //plot connect(thread_polt, &threadPoltChart::setChartView, this, &MainWindow::setPlotChartView); connect(thread_polt, &threadPoltChart::setWidget, this, &MainWindow::setWidget); connect(thread_polt, &threadPoltChart::setProgressBar, this, &MainWindow::setProgressBar); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_openFileBtn_clicked() { Gloab::fileName = QFileDialog::getOpenFileName(); //打开文件 Gloab::file.setFileName(Gloab::fileName); if (!Gloab::file.open(QIODevice::ReadOnly)) { // 打开失败时弹窗 QString dlgTitle = "错误"; QString strInfo = "文件打开失败"; QMessageBox::warning(this, dlgTitle, strInfo); //退出 return; } //设置进度条 layout = new QVBoxLayout(ui->widget); progressBar = new QProgressBar(ui->widget); layout->addWidget(progressBar); ui->widget->show(); // 获取文件大小 Gloab::fileSize = Gloab::file.size(); Gloab::bytesRead = 0; thread_read->start(); } void MainWindow::clearCombo() { ui->comboBox->clear(); } void MainWindow::showStatusbar(const QString &message) { ui->statusbar->showMessage(message); } void MainWindow::setBeginTime(const QDateTime &begin) { ui->beginTime->setDateTime(begin); } void MainWindow::setEndTime(const QDateTime &begin) { ui->endTime->setDateTime(begin); } void MainWindow::addCombo(const QStringList &list) { ui->comboBox->addItems(list); //根据输入匹配下拉框 Gloab::completer = new QCompleter(list); Gloab::completer->setFilterMode(Qt::MatchContains); ui->comboBox->setCompleter(Gloab::completer); } void MainWindow::setProgressBar(int percent) { progressBar->setValue(percent); } void MainWindow::closeProg() { layout->deleteLater(); progressBar->deleteLater(); ui->widget->close(); } void MainWindow::setChartView(int jd, bool isEnum) { // 设置图表标题 QCustPlot *qCustPlot = new QCustPlot(Gloab::xData[jd], Gloab::yData[jd], jd, isEnum, true); // 将qCustPlot添加到容器中 Gloab::m_QCView.append(qCustPlot); } void MainWindow::setWidget() { // 设置布局 int wide = 850; int hight = 600; if (Gloab::m_QCView.size() > 1) { wide = 1800; } QGridLayout *gridLayout = new QGridLayout(Gloab::widget); for (int i = 0, j = 0; i < Gloab::m_QCView.size(); i++) { if (i != 0 && i % 2 == 0) { j++; hight += 350; } gridLayout->addWidget(Gloab::m_QCView[i], j, i - 2 * j); } Gloab::widget->resize(wide, hight); Gloab::widget->move(70, 20); Gloab::widget->show(); layout->deleteLater(); progressBar->deleteLater(); ui->widget->close(); } void MainWindow::setPlotChartView(int jd, bool isEnum) { // 设置图表标题 QCustPlot *qCustPlot = new QCustPlot(Gloab::xData[jd], Gloab::yData[jd], jd, isEnum, false); // 将qCustPlot添加到容器中 Gloab::m_QCView.append(qCustPlot); } void MainWindow::on_lineChart_clicked() { if (Gloab::fileName.isEmpty()) { QMessageBox::warning(this, "警告", "请先打开一个日志"); return; } //关闭打开的窗口 if (Gloab::widget) { Gloab::widget->close(); delete Gloab::widget; Gloab::widget = nullptr; } //获取基带id QVector jd; if (ui->jd1->isChecked()) { jd.append(0); } if (ui->jd2->isChecked()) { jd.append(1); } if (ui->jd3->isChecked()) { jd.append(2); } if (ui->jd4->isChecked()) { jd.append(3); } if (jd.isEmpty()) { QMessageBox::warning(this, "警告", "请至少选择一个基带"); return; } //获取时间 QDateTime beginTime = ui->beginTime->dateTime(); QDateTime endTime = ui->endTime->dateTime(); if (beginTime>endTime) { QMessageBox::warning(this, "警告", "请选择正确的时间段"); return; } //获取参数名 QString dataName = ui->comboBox->currentText(); if (!Gloab::namelist.keys().contains(dataName)) { QMessageBox::warning(this, "警告", "未找到该数据"); return; } //传入数据绘图 thread_chart->setValue(jd, dataName, beginTime, endTime); Gloab::widget = new QWidget(); Gloab::widget->setWindowTitle(dataName); //设置进度条 layout = new QVBoxLayout(ui->widget); progressBar = new QProgressBar(ui->widget); layout->addWidget(progressBar); ui->widget->show(); // 获取文件大小 Gloab::fileSize=0; for (int i = 0; i < jd.size(); ++i) { Gloab::fileSize+=Gloab::g_param[jd[i]].size(); } Gloab::bytesRead = 0; thread_chart->start(); } bool MainWindow::isNumeric(const QString &str) { // 正则表达式匹配数字和可选的正负号 QRegularExpression pattern("^[+-]?([1-9][0-9]*|0)[.]?[0-9]*$"); QRegularExpressionMatch patternMatch = pattern.match(str); // 使用std::regex_match来检查字符串是否完全匹配模式 return patternMatch.hasMatch(); } void MainWindow::on_plotChart_clicked() { if (Gloab::fileName.isEmpty()) { QMessageBox::warning(this, "警告", "请先打开一个日志"); return; } //关闭打开的窗口 if (Gloab::widget) { Gloab::widget->close(); delete Gloab::widget; Gloab::widget = nullptr; } //获取基带id QVector jd; if (ui->jd1->isChecked()) { jd.append(0); } if (ui->jd2->isChecked()) { jd.append(1); } if (ui->jd3->isChecked()) { jd.append(2); } if (ui->jd4->isChecked()) { jd.append(3); } if (jd.isEmpty()) { QMessageBox::warning(this, "警告", "请至少选择一个基带"); return; } //获取时间 QDateTime beginTime = ui->beginTime->dateTime(); QDateTime endTime = ui->endTime->dateTime(); if (beginTime>endTime) { QMessageBox::warning(this, "警告", "请选择正确的时间段"); return; } //获取参数名 QString dataName = ui->comboBox->currentText(); if (!Gloab::namelist.keys().contains(dataName)) { QMessageBox::warning(this, "警告", "未找到该数据"); return; } //传入数据绘图 thread_polt->setValue(jd, dataName, beginTime, endTime); Gloab::widget = new QWidget(); Gloab::widget->setWindowTitle(dataName); //设置进度条 layout = new QVBoxLayout(ui->widget); progressBar = new QProgressBar(ui->widget); layout->addWidget(progressBar); ui->widget->show(); // 获取文件大小 Gloab::fileSize=0; for (int i = 0; i < jd.size(); ++i) { Gloab::fileSize+=Gloab::g_param[jd[i]].size(); } Gloab::bytesRead = 0; thread_polt->start(); }