#include "chartViews.h"
ChartViews::ChartViews(QQuickPaintedItem *parent) : QQuickPaintedItem(parent)
{
m_width = 0;
leftBorder = 50;
rightBorder = 10;
bottomBorder = 40;
topBorder = 10;
xx = 0;
A = 0;
Rang = 100;
decrease = 0;
num = 0;
connect(&timer,SIGNAL(timeout()),this,SLOT(xRangeChage()));
timer.setInterval(500);
timer.start();
}
void ChartViews::paint(QPainter *painter)
{
painter->save();
QPen pen(m_Color,1);
painter->setPen(pen);
painter->setRenderHints(QPainter::Antialiasing, true);
QFont font = painter->font();
font.setPointSizeF(15);
painter->setFont(font);
painter->drawText(m_width/2-70,40,m_name);
painter->restore();
// painter->setPen(pen);
painter->drawLine(leftBorder,topBorder,leftBorder,this->height() - bottomBorder);
//画y尖
painter->drawLine(leftBorder-10, topBorder+10,leftBorder,topBorder);
painter->drawLine(leftBorder+10, topBorder+10,leftBorder,topBorder);
//y轴间隔
intervalY = (m_height - bottomBorder - topBorder - 40)/(double)m_yNum;
for(int i = 0; i < m_yNum;i++)
{
int level = topBorder + 40+i*intervalY;
painter->drawLine(leftBorder,level,leftBorder+5,level);
double y = m_yRange/(double)m_yNum;
y = (m_yNum-i)*y;
QString text = QString::number(y, 'f', 1);
painter->drawText(leftBorder-39,level+5,text);
}
//x轴
int bottom = m_height - bottomBorder;
painter->drawLine(leftBorder,bottom,m_width-rightBorder,bottom);
painter->drawLine(m_width-rightBorder-10,bottom+10,m_width-rightBorder,bottom);
painter->drawLine(m_width-rightBorder-10,bottom-10,m_width-rightBorder,bottom);
//修改x轴>的距离 40 ->60
intervalX = (m_width - rightBorder - leftBorder - 60)/(double)m_xNum;
for(int i = A; i <= Rang-80; i++)
{
int level = leftBorder + i*intervalX - xx;
painter->drawLine(level,m_height-bottomBorder,level,m_height-bottomBorder-5);
double x = m_xRange/(double)m_xNum;
x = (i)*x;
QString text = QString::number(x, 'f', 0);
painter->drawText(level-7,m_height-bottomBorder+15,text);
}
//原点
painter->translate(leftBorder,m_height-bottomBorder);
QPen pens(Qt::yellow,1);
painter->setPen(pens);
painter->setRenderHints(QPainter::Antialiasing, true);
//画线段
for(int i = 0; i < m_point.size()-1;i++)
{
//painter->drawLine(coordinate(m_point.at(i)),coordinate(m_point.at(i+1)));
QPointF point = m_point.at(i);
QPointF point1 = m_point.at(i+1);
point.setX(point.x()-decrease+1);
point1.setX(point1.x()-decrease+1);
painter->drawLine(coordinate(point),coordinate(point1));
}
}
void ChartViews::xRangeChage()
{
xx = (intervalX/5.0)*decrease;
num++;
if((num)%5==2)
{
A ++;
Rang++;
}
update();
decrease++;
addData(num+99,rand()%100);
if(m_point.size()>=102)
{
m_point.removeFirst();
}
}
QPointF ChartViews::coordinate(QPointF ponit)
{
QPointF pointF;
pointF.setX(intervalX*(ponit.x()/(double)m_xRange)*m_xNum);
pointF.setY(-intervalY*(ponit.y()/(double)m_yRange)*m_yNum);
return pointF;
}
void ChartViews::addData(double tmpX, double tmpY)
{
QPointF point;
point.setX(tmpX);
point.setY(tmpY);
m_point.append(point);
update();
}
int ChartViews::yNum() const
{
return m_yNum;
}
void ChartViews::setYNum(const int yNum)
{
m_yNum = yNum;
}
int ChartViews::xNum() const
{
return m_xNum;
}
void ChartViews::setXNum(const int xNum)
{
m_xNum = xNum;
}
QColor ChartViews::color() const
{
return m_Color;
}
void ChartViews::setColor(const QColor &color)
{
m_Color = color;
}
int ChartViews::width() const
{
return m_width;
}
void ChartViews::setWidth(const int width)
{
m_width = width;
}
int ChartViews::height() const
{
return m_height;
}
void ChartViews::setHeight(const int height)
{
m_height = height;
}
int ChartViews::yRange() const
{
return m_yRange;
}
void ChartViews::setYRange(const int yRange)
{
m_yRange = yRange;
}
int ChartViews::xRange() const
{
return m_xRange;
}
void ChartViews::setXRange(const int xRange)
{
m_xRange = xRange;
}
QString ChartViews::name() const
{
return m_name;
}
void ChartViews::setName(QString name)
{
m_name = name;
}
没有合适的资源?快使用搜索试试~ 我知道了~
chartView.zip
共7个文件
cpp:2个
makefile:1个
qml:1个
2星 需积分: 10 16 下载量 131 浏览量
2020-07-26
15:13:38
上传
评论
收藏 7KB ZIP 举报
温馨提示
qml和C++混合编程自定义chartView曲线,曲线随时间从右向左依次移动动态移动,实时动态显示折线图的功能。
资源推荐
资源详情
资源评论
收起资源包目录
chartView.zip (7个子文件)
painter.pro 1KB
bin
chartViews.cpp 5KB
chartViews.h 2KB
main.cpp 523B
Makefile 23KB
qml.qrc 92B
main.qml 924B
共 7 条
- 1
资源评论
- chrissherry2021-10-02居然自定义控件……,没有更简洁的方式吗?
张新建嵌入式
- 粉丝: 1
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功