v1.1.0
This commit is contained in:
373
mainwindow.cpp
Normal file
373
mainwindow.cpp
Normal file
@ -0,0 +1,373 @@
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
|
||||
#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.1.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::newCandS, this, &MainWindow::newCandS);
|
||||
connect(thread_chart, &ThreadChart::appSeries, this, &MainWindow::appSeries);
|
||||
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::newCandS, this, &MainWindow::newPlotCandS);
|
||||
connect(thread_polt, &threadPoltChart::appSeries, this, &MainWindow::appSeries);
|
||||
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);
|
||||
ui->comboBox->setCompleter(Gloab::completer);
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::setProgressBar(int percent) {
|
||||
progressBar->setValue(percent);
|
||||
// qApp->processEvents(); // 更新UI
|
||||
}
|
||||
|
||||
void MainWindow::closeProg() {
|
||||
layout->deleteLater();
|
||||
progressBar->deleteLater();
|
||||
ui->widget->close();
|
||||
}
|
||||
|
||||
void MainWindow::newCandS() {
|
||||
chart = new QChart;
|
||||
series = new QLineSeries;
|
||||
// series->setPointsVisible();
|
||||
}
|
||||
|
||||
void MainWindow::appSeries(qreal A, qreal B) {
|
||||
series->append(A, B);
|
||||
}
|
||||
|
||||
void MainWindow::setChartView(int jd, bool isEnum) {
|
||||
// 设置图表标题
|
||||
chart->setTitle(QString("基带 %1").arg(jd+1));
|
||||
chart->addSeries(series);
|
||||
if (isEnum) {
|
||||
chart->createDefaultAxes();
|
||||
// 获取X轴
|
||||
QList<QAbstractAxis *> xAxes = chart->axes(Qt::Horizontal);
|
||||
// 断开所有与该轴关联的系列
|
||||
series->detachAxis(xAxes[0]);
|
||||
// 从图表中移除轴
|
||||
chart->removeAxis(xAxes[0]);
|
||||
} else {
|
||||
// 创建类别Y轴
|
||||
QCategoryAxis *axisY = new QCategoryAxis();
|
||||
for (int var = 1; var < Gloab::rule.size(); ++var) {
|
||||
axisY->append(Gloab::rule[var], var);
|
||||
}
|
||||
//刻度线和刻度的label对齐
|
||||
axisY->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);
|
||||
axisY->setRange(0, Gloab::rule.size() + 1);
|
||||
chart->setAxisY(axisY, series);
|
||||
// series->attachAxis(axisY);
|
||||
}
|
||||
|
||||
|
||||
// 创建一个时间轴
|
||||
QDateTimeAxis *axisX = new QDateTimeAxis;
|
||||
axisX->setTickCount(10);
|
||||
axisX->setFormat("HH:mm"); // 设置时间格式
|
||||
chart->addAxis(axisX, Qt::AlignBottom);
|
||||
series->attachAxis(axisX);
|
||||
|
||||
|
||||
// 创建QChartView
|
||||
QChartView *chartView = new QChartView(chart);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// 将chartView添加到容器中
|
||||
Gloab::m_chartViews.append(chartView);
|
||||
}
|
||||
|
||||
void MainWindow::setWidget() {
|
||||
// 设置布局
|
||||
int wide = 850;
|
||||
int hight = 600;
|
||||
if (Gloab::m_chartViews.size() > 1) {
|
||||
wide = 1800;
|
||||
}
|
||||
QGridLayout *gridLayout = new QGridLayout(Gloab::widget);
|
||||
for (int i = 0, j = 0; i < Gloab::m_chartViews.size(); i++) {
|
||||
if (i != 0 && i % 2 == 0) {
|
||||
j++;
|
||||
hight += 350;
|
||||
}
|
||||
gridLayout->addWidget(Gloab::m_chartViews[i], j, i - 2 * j);
|
||||
}
|
||||
Gloab::widget->resize(wide, hight);
|
||||
// Gloab::widget->setMaximumHeight(950);
|
||||
|
||||
Gloab::widget->move(70, 20);
|
||||
Gloab::widget->show();
|
||||
|
||||
layout->deleteLater();
|
||||
progressBar->deleteLater();
|
||||
ui->widget->close();
|
||||
}
|
||||
|
||||
void MainWindow::newPlotCandS() {
|
||||
chart = new QChart;
|
||||
series = new QLineSeries;
|
||||
// series->setPointsVisible();
|
||||
}
|
||||
|
||||
void MainWindow::setPlotChartView(int jd, bool isEnum) {
|
||||
// 设置图表标题
|
||||
chart->setTitle(QString("基带 %1").arg(jd+1));
|
||||
chart->addSeries(series);
|
||||
if (isEnum) {
|
||||
chart->createDefaultAxes();
|
||||
|
||||
} else {
|
||||
//创建默认XY轴
|
||||
chart->createDefaultAxes();
|
||||
//删除Y轴
|
||||
// 获取Y轴
|
||||
QList<QAbstractAxis *> yAxes = chart->axes(Qt::Vertical);
|
||||
// 断开所有与该轴关联的系列
|
||||
series->detachAxis(yAxes[0]);
|
||||
// 从图表中移除轴
|
||||
chart->removeAxis(yAxes[0]);
|
||||
// 创建类别Y轴
|
||||
QCategoryAxis *axisY = new QCategoryAxis();
|
||||
for (int var = 1; var < Gloab::rule.size(); ++var) {
|
||||
axisY->append(Gloab::rule[var], var);
|
||||
}
|
||||
//刻度线和刻度的label对齐
|
||||
axisY->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);
|
||||
axisY->setRange(0, Gloab::rule.size() + 1);
|
||||
chart->setAxisY(axisY, series);
|
||||
// plotSeries->attachAxis(axisY);
|
||||
}
|
||||
|
||||
|
||||
// 创建QChartView
|
||||
QChartView *chartView = new QChartView(chart);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// 将chartView添加到容器中
|
||||
Gloab::m_chartViews.append(chartView);
|
||||
}
|
||||
|
||||
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<int> 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<int> 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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user