完成时间图绘制
This commit is contained in:
@ -22,6 +22,10 @@ set(PROJECT_SOURCES
|
|||||||
global.h
|
global.h
|
||||||
readthread.cpp
|
readthread.cpp
|
||||||
readthread.h
|
readthread.h
|
||||||
|
customtime.h
|
||||||
|
customtime.cpp
|
||||||
|
qcustomplot.h
|
||||||
|
qcustomplot.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
||||||
|
@ -9,12 +9,14 @@ CONFIG += c++11
|
|||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
customtime.cpp \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
mainwindow.cpp \
|
mainwindow.cpp \
|
||||||
qcustomplot.cpp \
|
qcustomplot.cpp \
|
||||||
readthread.cpp
|
readthread.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
customtime.h \
|
||||||
global.h \
|
global.h \
|
||||||
mainwindow.h \
|
mainwindow.h \
|
||||||
qcustomplot.h \
|
qcustomplot.h \
|
||||||
|
57
customtime.cpp
Normal file
57
customtime.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#include "customtime.h"
|
||||||
|
|
||||||
|
CustomTimeThread::CustomTimeThread(QObject *parent)
|
||||||
|
: QThread{parent} {}
|
||||||
|
|
||||||
|
void CustomTimeThread::setValue(QVector<int> vector, QString string) {
|
||||||
|
this->jd = vector;
|
||||||
|
this->dataName = string;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CustomTimeThread::run() {
|
||||||
|
m_PlotView.clear();
|
||||||
|
rule.clear();
|
||||||
|
|
||||||
|
for (int var = 0; var < 4; ++var) {
|
||||||
|
xData[var].clear();
|
||||||
|
yData[var].clear();
|
||||||
|
}
|
||||||
|
//判断右侧数据是否为数字型
|
||||||
|
bool isEnum = namelist[dataName];
|
||||||
|
int bytesRead = 0;
|
||||||
|
for (int i = 0; i < jd.size(); ++i) {
|
||||||
|
QString tem = "这是一个无实际作用的标识";
|
||||||
|
for (int j = 0; j < g_param[jd[i]].size(); j++) {
|
||||||
|
//更新进度条
|
||||||
|
bytesRead++;
|
||||||
|
emit setProgressBar(bytesRead);
|
||||||
|
|
||||||
|
QDateTime temTime = QDateTime::fromString(g_param[jd[i]][j]["时间"], "yyyy-MM-dd hh:mm:ss:zzz");
|
||||||
|
if (temTime >= beginTime && temTime < endTime) {
|
||||||
|
if (g_param[jd[i]][j].contains(dataName)) {
|
||||||
|
tem = g_param[jd[i]][j][dataName];
|
||||||
|
} else {
|
||||||
|
if (tem == "这是一个无实际作用的标识") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xData[jd[i]].append(temTime.toMSecsSinceEpoch() / 1000.0);
|
||||||
|
if (isEnum) {
|
||||||
|
yData[jd[i]].append(tem.toDouble());
|
||||||
|
} else {
|
||||||
|
if (rule.contains(tem)) {
|
||||||
|
yData[jd[i]].append(rule.indexOf(tem));
|
||||||
|
} else {
|
||||||
|
rule.append(tem);
|
||||||
|
yData[jd[i]].append(rule.indexOf(tem));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
emit setPlotView(jd[i], isEnum, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
emit setWidget();
|
||||||
|
quit();
|
||||||
|
}
|
||||||
|
|
30
customtime.h
Normal file
30
customtime.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef CUSTOMTIMETHREAD_H
|
||||||
|
#define CUSTOMTIMETHREAD_H
|
||||||
|
|
||||||
|
#include <QThread>
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
class CustomTimeThread : public QThread {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit CustomTimeThread(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
void setValue(QVector<int> vector, QString string);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
void setProgressBar(int bytesRead);
|
||||||
|
|
||||||
|
void setPlotView(int jd, bool isNum, bool isTime);
|
||||||
|
|
||||||
|
void setWidget();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void run() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QVector<int> jd;
|
||||||
|
QString dataName;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CUSTOMTIMETHREAD_H
|
32
global.h
32
global.h
@ -1,30 +1,26 @@
|
|||||||
#ifndef READLOG_GLOBAL_H
|
#ifndef READLOG_GLOBAL_H
|
||||||
#define READLOG_GLOBAL_H
|
#define READLOG_GLOBAL_H
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QCompleter>
|
#include <QCompleter>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QDateTime>
|
||||||
|
#include "qcustomplot.h"
|
||||||
|
|
||||||
extern QVector<QMap<QString,QString>> g_param[4]; //存储4条基带的数据
|
extern QVector<QMap<QString, QString>> g_param[4]; //存储4条基带的数据
|
||||||
extern QMap<QString,bool> namelist; //存储数据名以及数据是否是数字
|
extern QMap<QString, bool> namelist; //存储数据名以及数据是否是数字
|
||||||
extern QFile file; //打开文件
|
extern QFile file; //打开文件
|
||||||
extern QCompleter *completer;
|
extern QCompleter *completer; //下拉框选项
|
||||||
|
extern QWidget *widget; //新窗口
|
||||||
|
extern QDateTime beginTime;
|
||||||
|
extern QDateTime endTime;
|
||||||
|
extern QVector<QCustomPlot *> m_PlotView;
|
||||||
|
extern QVector<QString> rule;
|
||||||
|
extern QVector<double> xData[4];
|
||||||
|
extern QVector<double> yData[4];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //READLOG_GLOBAL_H
|
#endif //READLOG_GLOBAL_H
|
||||||
|
9
main.cpp
9
main.cpp
@ -11,12 +11,19 @@ QVector<QMap<QString, QString>> g_param[4];
|
|||||||
QMap<QString, bool> namelist;
|
QMap<QString, bool> namelist;
|
||||||
QFile file;
|
QFile file;
|
||||||
QCompleter *completer;
|
QCompleter *completer;
|
||||||
|
QWidget *widget;
|
||||||
|
QDateTime beginTime;
|
||||||
|
QDateTime endTime;
|
||||||
|
QVector<QCustomPlot *> m_PlotView;
|
||||||
|
QVector<QString> rule;
|
||||||
|
QVector<double> xData[4];
|
||||||
|
QVector<double> yData[4];
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
//设置logo
|
//设置logo
|
||||||
QApplication::setWindowIcon(QIcon("logo.ico"));
|
QApplication::setWindowIcon(QIcon("logo.ico"));
|
||||||
//放大窗口
|
//放大窗口
|
||||||
// qputenv("QT_SCALE_FACTOR", "2.0");
|
// qputenv("QT_SCALE_FACTOR", "2.0");
|
||||||
//设置使用UTF8字符集,正确显示中文
|
//设置使用UTF8字符集,正确显示中文
|
||||||
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
|
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
|
||||||
QTextCodec::setCodecForLocale(codec);
|
QTextCodec::setCodecForLocale(codec);
|
||||||
|
142
mainwindow.cpp
142
mainwindow.cpp
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent), ui(new Ui::MainWindow), readThread(new ReadThread) {
|
: QMainWindow(parent), ui(new Ui::MainWindow), readThread(new ReadThread), customTime(new CustomTimeThread) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
// 创建版本号标签并添加到状态栏的右端
|
// 创建版本号标签并添加到状态栏的右端
|
||||||
QLabel *m_versionLabel = new QLabel(tr("v1.2.0"), this);
|
QLabel *m_versionLabel = new QLabel(tr("v1.2.0"), this);
|
||||||
@ -25,6 +25,12 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
connect(readThread, &ReadThread::setEndTime, this, &MainWindow::setEndTime);
|
connect(readThread, &ReadThread::setEndTime, this, &MainWindow::setEndTime);
|
||||||
connect(readThread, &ReadThread::addCombo, this, &MainWindow::addCombo);
|
connect(readThread, &ReadThread::addCombo, this, &MainWindow::addCombo);
|
||||||
connect(readThread, &ReadThread::closeProg, this, &MainWindow::closeProg);
|
connect(readThread, &ReadThread::closeProg, this, &MainWindow::closeProg);
|
||||||
|
|
||||||
|
//customTime
|
||||||
|
connect(customTime, &CustomTimeThread::setProgressBar, this, &MainWindow::setProgressBar);
|
||||||
|
connect(customTime, &CustomTimeThread::setPlotView, this, &MainWindow::setPlotView);
|
||||||
|
connect(customTime, &CustomTimeThread::setWidget, this, &MainWindow::setWidget);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow() {
|
MainWindow::~MainWindow() {
|
||||||
@ -56,7 +62,69 @@ void MainWindow::on_openFileBtn_clicked() {
|
|||||||
|
|
||||||
|
|
||||||
void MainWindow::on_timeCustomBtn_clicked() {
|
void MainWindow::on_timeCustomBtn_clicked() {
|
||||||
ui->progressBar->close();
|
if (file.fileName().isEmpty()) {
|
||||||
|
QMessageBox::warning(this, "警告", "请先打开一个日志");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//关闭打开的窗口
|
||||||
|
if (widget) {
|
||||||
|
widget->close();
|
||||||
|
delete widget;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取时间
|
||||||
|
beginTime = ui->beginTimeEdit->dateTime();
|
||||||
|
endTime = ui->endTimeEdit->dateTime();
|
||||||
|
if (beginTime > endTime) {
|
||||||
|
QMessageBox::warning(this, "警告", "请选择正确的时间段");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//获取参数名
|
||||||
|
QString dataName = ui->comboBox->currentText();
|
||||||
|
if (!namelist.keys().contains(dataName)) {
|
||||||
|
QMessageBox::warning(this, "警告", "未找到该数据");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//传入数据绘图
|
||||||
|
customTime->setValue(jd, dataName);
|
||||||
|
widget = new QWidget();
|
||||||
|
widget->setWindowTitle(dataName);
|
||||||
|
|
||||||
|
// 获取文件大小
|
||||||
|
int fileSize = 0;
|
||||||
|
for (int i = 0; i < jd.size(); ++i) {
|
||||||
|
fileSize += g_param[jd[i]].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
//设置进度条
|
||||||
|
ui->progressBar->setValue(0);
|
||||||
|
ui->progressBar->setMaximum(fileSize);
|
||||||
|
ui->progressBar->show();
|
||||||
|
|
||||||
|
customTime->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -97,3 +165,73 @@ void MainWindow::closeProg() {
|
|||||||
ui->progressBar->close();
|
ui->progressBar->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::setPlotView(int jd, bool isNum, bool isTime) {
|
||||||
|
QCustomPlot *qCustomPlot = new QCustomPlot();
|
||||||
|
//标题
|
||||||
|
QCPTextElement *m_title;
|
||||||
|
qCustomPlot->plotLayout()->insertRow(0);
|
||||||
|
m_title = new QCPTextElement(qCustomPlot, QString("基带 %1").arg(jd + 1));
|
||||||
|
qCustomPlot->plotLayout()->addElement(0, 0, m_title);
|
||||||
|
|
||||||
|
// X轴
|
||||||
|
if (isTime) {
|
||||||
|
QSharedPointer<QCPAxisTickerDateTime> timeTicker(new QCPAxisTickerDateTime);
|
||||||
|
timeTicker->setDateTimeFormat("hh:mm:ss");
|
||||||
|
qCustomPlot->xAxis->setTicker(timeTicker);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Y轴
|
||||||
|
if (!isNum) {
|
||||||
|
QVector<double> ticks;
|
||||||
|
QVector<QString> labels;
|
||||||
|
for (int i = 0; i < rule.size(); ++i) {
|
||||||
|
ticks.append(i);
|
||||||
|
labels.append(rule[i]);
|
||||||
|
}
|
||||||
|
QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
|
||||||
|
textTicker->addTicks(ticks, labels);
|
||||||
|
qCustomPlot->yAxis->setTicker(textTicker);
|
||||||
|
} else {
|
||||||
|
// qCustomPlot->yAxis->setNumberFormat("f"); //以数字形式显示
|
||||||
|
// qCustomPlot->yAxis->setNumberPrecision(2); //显示两位小数
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加图形
|
||||||
|
qCustomPlot->addGraph();
|
||||||
|
qCustomPlot->graph(0)->setData(xData[jd], yData[jd]);
|
||||||
|
|
||||||
|
|
||||||
|
// 自动调整轴范围
|
||||||
|
qCustomPlot->rescaleAxes();
|
||||||
|
|
||||||
|
qCustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
|
||||||
|
|
||||||
|
if (!xData[jd].empty()) {
|
||||||
|
qCustomPlot->xAxis->setRange(xData[jd].first(), xData[jd].last());
|
||||||
|
}
|
||||||
|
|
||||||
|
m_PlotView.append(qCustomPlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setWidget() {
|
||||||
|
// 设置布局
|
||||||
|
int wide = 850;
|
||||||
|
int hight = 600;
|
||||||
|
if (m_PlotView.size() > 1) {
|
||||||
|
wide = 1800;
|
||||||
|
}
|
||||||
|
QGridLayout *gridLayout = new QGridLayout(widget);
|
||||||
|
for (int i = 0, j = 0; i < m_PlotView.size(); i++) {
|
||||||
|
if (i != 0 && i % 2 == 0) {
|
||||||
|
j++;
|
||||||
|
hight += 350;
|
||||||
|
}
|
||||||
|
gridLayout->addWidget(m_PlotView[i], j, i - 2 * j);
|
||||||
|
}
|
||||||
|
widget->resize(wide, hight);
|
||||||
|
widget->move(70, 20);
|
||||||
|
widget->show();
|
||||||
|
|
||||||
|
ui->progressBar->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "readthread.h"
|
#include "readthread.h"
|
||||||
|
#include "customtime.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
@ -53,9 +54,15 @@ private slots:
|
|||||||
/*关闭进度条*/
|
/*关闭进度条*/
|
||||||
void closeProg();
|
void closeProg();
|
||||||
|
|
||||||
|
void setPlotView(int jd, bool isNum, bool isTime);
|
||||||
|
|
||||||
|
void setWidget();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
ReadThread *readThread;
|
ReadThread *readThread;
|
||||||
|
CustomTimeThread *customTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
Reference in New Issue
Block a user