-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdialog_chart.cpp
More file actions
193 lines (182 loc) · 5.86 KB
/
dialog_chart.cpp
File metadata and controls
193 lines (182 loc) · 5.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include "dialog_chart.h"
#include "ui_dialog_chart.h"
#include "mainwindow.h"
#include <QThread>
QQueue<double> list1;
extern int flag_chart;
dialog_chart::dialog_chart(QWidget *parent) :
QDialog(parent),
ui(new Ui::dialog_chart)
{
ui->setupUi(this);
Qt::WindowFlags flags= this->windowFlags();
setWindowFlags(flags&~(
Qt::WindowContextHelpButtonHint|
Qt::WindowMaximizeButtonHint|
Qt::WindowMinimizeButtonHint|
Qt::WindowCloseButtonHint)
);
NUM_line=1;
Xrange=200;
YHrange=3.3;
YLrange=0;
ui->Edit_NUMline->setPlaceholderText("线条个数:1");
ui->Edit_Xrange->setPlaceholderText("横坐标点数:200");
ui->Edit_Yrange->setPlaceholderText("纵坐标范围:0,3.3");
//实例化折线类
for(int i=0;i<10;i++)
{
serieslist.append(new QLineSeries());
}
series=serieslist[0];
//实例化图类
chart = new QChart();
//将折线与图表绑定
for(int i=0;i<10;i++)
{
chart->addSeries(serieslist[i]);
}
//开启opengl加速
series->setUseOpenGL(true);
series->setVisible(true);
for(int i=1;i<10;i++)
{
serieslist[i]->setUseOpenGL(false);
serieslist[i]->setVisible(false);
}
// 将图表绑定到视图
ui->widget->setChart(chart);
//抗锯齿
ui->widget->setRenderHint(QPainter::Antialiasing);
ui->widget->chart()->setTheme(QChart::ChartThemeHighContrast);//Light , Dark ,Brown Sand ,Blue Ncs,High Contrast,Blue Icy,Qt,BlueCerulean
axisX = new QValueAxis(this);
axisX->setRange(0, Xrange-1);
axisY = new QValueAxis(this);
axisY->setRange(YLrange, YHrange);
//axisY->setTitleText("axisY");
chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);
series->attachAxis(axisX);
series->attachAxis(axisY);
series->setName("signal_1");
for(int i=1;i<10;i++)
{
serieslist[i]->attachAxis(axisX);
serieslist[i]->attachAxis(axisY);
serieslist[i]->setName("signal_"+ QString::number(i));
}
// 基于已添加到图表的 series 来创建默认的坐标轴
chart->setTitle("real_time_data_show");
chart->setTitleFont(QFont("宋体",16));
chart->legend()->setVisible(true);//显示图例
chart->legend()->setAlignment(Qt::AlignBottom);
// 测试数据
// QString rece_data="123.4 12.45 16.6\t 12.11\n 13.5 3.4 2.45 161.6\t ";
// dialog_chart::dataofchart(rece_data);
// QString rece_data1="3.4 2.45 161.6\t 29.11\n 3.5 123.4 12.45 16.6\t 12.11\n";
// dialog_chart::dataofchart(rece_data1);
}
dialog_chart::~dialog_chart()
{
delete ui;
}
void dialog_chart::reject()
{
}
void dialog_chart::on_quitButton_clicked()
{
flag_chart=0;
//this->close();
//close也是在调用reject,故无法关闭界面
this->accept();
}
QStringList temp;
void dialog_chart::dataofchart(QString rece_data)
{
//SkipEmptyParts设置跳过空格符,默认是保留空格符
temp.append(rece_data.split(QRegExp("[,|,|\\s|\\t|\\n]"),QString::SkipEmptyParts));
if(temp.size()>0)
{
//将采集数据传入list1这个队列中
for(int i = 0; i< temp.size();++i)
{
list1.enqueue(temp.at(i).toDouble());
}
temp.clear();
int a=list1.count()-Xrange*NUM_line;
//控制各个队列长度为Xrange
if (a>0)
{
for(int i = 0; i< a;++i)
{
list1.dequeue();
}
}
for(int i=0;i<NUM_line;i++)
{
serieslist[i]->clear();
//将新队列数据传入折线图中
for (int i1 = 0; i1 < list1.count()/NUM_line; i1++)
{
serieslist[i]->append(i1,list1.at(i1*NUM_line+i));
}
}
}
}
void dialog_chart::on_Edit_NUMline_returnPressed()
{
NUM_line=ui->Edit_NUMline->text().toInt();
if(NUM_line>10||NUM_line<1)
NUM_line=1;
for(int i=NUM_line;i<10;i++)
{
serieslist[i]->clear();
serieslist[i]->setUseOpenGL(false);
serieslist[i]->setVisible(false);
}
for(int i=0;i<NUM_line;i++)
{
serieslist[i]->setUseOpenGL(true);
serieslist[i]->setVisible(true);
}
}
void dialog_chart::on_Edit_Xrange_returnPressed()
{
//chart->removeAxis(axisX);
Xrange=ui->Edit_Xrange->text().toInt();
if(Xrange<1)
Xrange=200;
axisX->setRange(0, Xrange-1);
}
void dialog_chart::on_Edit_Yrange_returnPressed()
{
QStringList temp=ui->Edit_Yrange->text().split(",");
YHrange=temp[1].toFloat();
YLrange=temp[0].toFloat();
if(YHrange<=YLrange)
{
YHrange=3.3;
YLrange=0;
}
axisY->setRange(YLrange, YHrange);
}
void dialog_chart::on_Edit_theme_returnPressed()
{
if(0==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeHighContrast);
else if(1==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeLight);
else if(2==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeDark);
else if(3==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeBrownSand);
else if(4==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeBlueNcs);
else if(5==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeBlueIcy);
else if(6==ui->Edit_theme->text().toInt())
ui->widget->chart()->setTheme(QChart::ChartThemeQt);
else
ui->widget->chart()->setTheme(QChart::ChartThemeBlueCerulean);
ui->Edit_theme->clear();
}