#include <QDebug>
#include "ChartsView.h"
#include <QtGui/QResizeEvent>
#include <QtWidgets/QGraphicsScene>
#include <QtCharts/QChart>
#include <QtCharts/QLineSeries>
#include <QtCharts/QSplineSeries>
#include <QtWidgets/QGraphicsTextItem>
#include <QtGui/QMouseEvent>
#include <QValueAxis>
#define X_Width 5 //宽度5S
ChartsView::ChartsView(int YRange, QWidget *parent)
: QGraphicsView(new QGraphicsScene, parent),
m_coordX(0),
m_coordY(0),
m_chart(0)
{
setDragMode(QGraphicsView::NoDrag);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_chart = new QChart;
initLineSeries( YRange);
m_chart->setAcceptHoverEvents(true);
setRenderHint(QPainter::Antialiasing);
scene()->addItem(m_chart);
m_coordX = new QGraphicsSimpleTextItem(m_chart);
m_coordX->setPos(m_chart->size().width()/2 + 100, m_chart->size().height());
m_coordX->setText("");
m_coordX->setPen(QColor(20,164,226));
m_coordY = new QGraphicsSimpleTextItem(m_chart);
m_coordY->setPos(m_chart->size().width()/2 - 50, m_chart->size().height());
m_coordY->setText("");
m_coordY->setPen(QColor(226,20,216));
this->setMouseTracking(true);
MSecBase = QDateTime::currentDateTime().toMSecsSinceEpoch();
}
void ChartsView::initLineSeries(int YRange)
{
QColor colors[3] = {QColor(20,164,226),QColor(36,20,226),QColor(226,20,216)};
//创建X轴和Y轴
axisX = new QValueAxis;
axisX->setLabelFormat("%ds");
axisX->setTickCount(X_Width); //定义X有多少个表格
axisX->setRange(0,X_Width);
axisY = new QValueAxis;
axisY->setRange(-YRange,YRange);
axisY->setTitleText("纹波值");
axisY->setTickCount(9); //定义Y有多少个表格
for(int i =0; i<3;i++)
{
series[i].setColor(colors[i]);
series[i].setName(QString("测值%1").arg(i));
series[i].setVisible(true);
m_chart->addSeries(&series[i]);
m_chart->setAxisX(axisX,&series[i]);
m_chart->setAxisY(axisY,&series[i]);
m_Line[i] = new QGraphicsSimpleTextItem(m_chart);
m_Line[i]->setPos(34+i*40, m_chart->size().height()- 20);
m_Line[i]->setText(QString("测值%1").arg(i));
m_Line[i]->setPen(colors[i]);
}
//设置底部
m_chart->legend()->setVisible(false);
}
void ChartsView::initMSecBase(int YRange) //初始化MSecBase,以MSecBase为开头
{
axisX->setMin(0);
axisX->setMax(X_Width);
axisY->setMin(-YRange);
axisY->setMax(YRange);
for(int i=0;i<3;i++)
{
series[i].clear();
series[i].clear();
series[i].append(QPointF(0,0));
}
MSecBase = QDateTime::currentDateTime().toMSecsSinceEpoch();
}
void ChartsView::clearMSecBase()
{
MSecBase = QDateTime::currentDateTime().toMSecsSinceEpoch();
}
void ChartsView::setShowLine(int flag) //0~2:显示某个曲线 否则的话显示所有曲线
{
for(int i=0;i<3;i++)
{
if(flag>=0&&flag<=2)
{
if(flag==i)
series[i].show();
else
series[i].hide();
}
else
series[i].show();
}
}
void ChartsView::addLineSeries(int i,float value)
{
float currentS =(QDateTime::currentDateTime().toMSecsSinceEpoch() - MSecBase)/1000.0; //1s=1000MS
if(i>=3) return;
if(currentS>=axisX->max())
{
axisX->setMin(currentS-X_Width);
axisX->setMax(currentS);
}
if(value>=qMax(qAbs(axisY->max()),qAbs(axisY->min())))
{
axisY->setMin(-value*1.1);
axisY->setMax(value*1.1);
}
//定时清除以前不要的曲线数据
if(series[i].count()>600)
{
series[i].removePoints(0,series[i].count()/2);
}
series[i].append(QPointF(currentS,value));
}
void ChartsView::addLineSeries(int i,float s,float value)
{
if(s>=axisX->max())
{
axisX->setMin(s-X_Width);
axisX->setMax(s);
}
if(value>=qMax(qAbs(axisY->max()),qAbs(axisY->min())))
{
axisY->setMin(-value*1.1);
axisY->setMax(value*1.1);
}
series[i].append(QPointF(s,value)) ;
}
void ChartsView::resizeEvent(QResizeEvent *event)
{
if (scene()) {
scene()->setSceneRect(QRect(QPoint(0, 0), event->size()));
m_chart->resize(event->size());
m_coordX->setPos(m_chart->size().width()/2 + 100, m_chart->size().height() - 20);
m_coordY->setPos(m_chart->size().width()/2 - 50, m_chart->size().height() - 20);
for(int i=0;i<3;i++)
{
m_Line[i]->setPos(34+i*40, m_chart->size().height()- 20);
m_Line[i]->setText(QString("测值%1").arg(i));
}
}
QGraphicsView::resizeEvent(event);
}
void ChartsView::mouseMoveEvent(QMouseEvent *event)
{
m_coordX->setText(QString("值:%1mV").arg(QString::asprintf("%.2f",m_chart->mapToValue(event->pos()).y())));
m_coordY->setText(QString("时间:%1S").arg(QString::asprintf("%.2f",m_chart->mapToValue(event->pos()).x())));
emit mouseMoveisChange(QPointF(m_chart->mapToValue(event->pos()).x(),m_chart->mapToValue(event->pos()).y()));
QGraphicsView::mouseMoveEvent(event);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Qt-Charts动态显示多条折线电压值(实现示波器效果).rar (69个子文件)
可以直接运行的程序
Qt5Charts.dll 1.17MB
Qt5Svg.dll 340KB
libGLESV2.dll 2.67MB
db.mdb 352KB
Qt5Widgets.dll 6.07MB
iconengines
qsvgicon.dll 43KB
libwinpthread-1.dll 78KB
Qt5Sql.dll 272KB
Qt5Gui.dll 5.04MB
Qt5Core.dll 5.15MB
mVGet.exe 192KB
D3Dcompiler_43.dll 2.01MB
sqldrivers
qsqlite.dll 806KB
qsqlpsql.dll 80KB
qsqlodbc.dll 98KB
qsqlmysql.dll 74KB
libgcc_s_dw2-1.dll 118KB
libEGL.dll 22KB
platforms
qwindows.dll 1.65MB
opengl32sw.dll 14.52MB
translations
qt_fi.qm 157KB
qt_cs.qm 155KB
qt_ca.qm 170KB
qt_lv.qm 150KB
qt_uk.qm 157KB
qt_sk.qm 123KB
qt_pl.qm 143KB
qt_hu.qm 89KB
qt_ru.qm 156KB
qt_en.qm 23B
qt_it.qm 157KB
qt_de.qm 171KB
qt_fr.qm 162KB
qt_he.qm 136KB
qt_ja.qm 129KB
qt_ko.qm 121KB
libstdc++-6.dll 1.47MB
imageformats
qtga.dll 28KB
qgif.dll 33KB
qwebp.dll 407KB
qtiff.dll 484KB
qwbmp.dll 27KB
qsvg.dll 28KB
qicns.dll 46KB
qdds.dll 58KB
qjpeg.dll 253KB
qico.dll 36KB
Qt5SerialPort.dll 76KB
mVGet
widget.ui 8KB
icon.ico 50KB
back1.jpg 36KB
Icon.rc 52B
main.cpp 195B
mVGet.pro 1KB
main.css 0B
ChartsView
ChartsView.pri 150B
ChartsView.pro 171B
main.cpp 2KB
ChartsView.cpp 5KB
widget.cpp 589B
ChartsView.H 1KB
widget.h 433B
ChartsView.pro.user 23KB
main.css.bak 51B
log.png 842B
widget.cpp 2KB
widget.h 913B
res.qrc 227B
widget_MvGet.cpp 744B
共 69 条
- 1
资源评论
诺谦
- 粉丝: 1w+
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功