qt折线图和柱状图共轴

1.多条折线图共轴

2.折线图和柱状图共轴

3.柱状图实现每条颜色单独控制

4.柱状图和折线图共x轴,不共y轴

    //为防止内存泄露用全局变量
    QBarSeries *m_lsHistogram = NULL;
    QLineSeries *m_lsMainSeries = NULL;
    QLineSeries *m_lsAveSeries = NULL;
    QLineSeries *m_lsYestSeries = NULL;
    QCategoryAxis *m_caMainX = NULL;
    QCategoryAxis *m_caMainY = NULL;
    QBarCategoryAxis *m_bcBarX = NULL;
    QChart *m_chart = NULL;

    m_Ui->widget->clearFocus();
    m_Ui->widget->clearMask();

	if(m_lsMainSeries)
	{
		delete m_lsMainSeries;
		m_lsMainSeries = NULL;
	}
	m_lsMainSeries = new QLineSeries(); //主线

	if(m_lsAveSeries)
	{
		delete m_lsAveSeries;
		m_lsAveSeries = NULL;
	}
	m_lsAveSeries = new QLineSeries(); //均线

	if(m_lsYestSeries)
	{
		delete m_lsYestSeries;
		m_lsYestSeries = NULL;
	}
	m_lsYestSeries = new QLineSeries(); //昨结昨收线

	if(m_lsHistogram)
	{
		delete m_lsHistogram;
		m_lsHistogram = NULL;
	}
	m_lsHistogram = new QBarSeries(); //柱状图

	if(m_caMainX)
	{
		delete m_caMainX;
		m_caMainX = NULL;
	}
	m_caMainX = new QCategoryAxis(); //x轴

	if(m_caMainY)
	{
		delete m_caMainY;
		m_caMainY = NULL;
	}
	m_caMainY = new QCategoryAxis(); //y轴

	if(m_bcBarX)
	{
		delete m_bcBarX;
		m_bcBarX = NULL;
	}
	m_bcBarX = new QBarCategoryAxis; //柱状图x轴

	//网格线设置
	m_caMainX->setGridLineVisible(true);
	m_caMainX->setGridLineColor(QColor(64, 64, 64));
	m_caMainX->setTickCount(20); //横网格数量
	m_caMainY->setGridLineVisible(true);
	m_caMainY->setGridLineColor(QColor(64, 64, 64));
	m_caMainY->setTickCount(29); //纵网格数量
	m_bcBarX->setGridLineVisible(false);
	m_bcBarX->setVisible(false);
	


	//设置主线和昨结昨收线数据

	for(int i=0; i<---; i++)
	{
		m_lsMainSeries->append(---, ---);
		m_lsYestSeries->append(---, ---);
		m_lsAveSeries->append(---, ---);
	}


	//设置柱状图数据
	QBarSet *bsVolume = NULL;
	for(int i=0; i<---; i++)
	{
		bsVolume = new QBarSet("");
		float fPillarheight = ---; //柱状高度
		
		*bsVolume << ---; //设置柱状高度
		bsVolume->setBorderColor(QColor(0, 255, 255)); //设置柱状颜色
		bsVolume->setColor(QColor(0, 255, 255));
		
		m_lsHistogram->append(bsVolume);
	}
	m_lsHistogram->setBarWidth(1); //设置柱状宽度(1为饱和状态)

	m_caMainX->setRange(vMinuteNew.begin()->iTime, (vMinuteNew.end()-1)->iTime);
	m_caMainY->setRange(fDrawLow, fDrawHigh);

	//设置x轴时间数据
	for(int i=0; i<19; i++)
	{
		int iLong = vMinute.size() / 19;
		m_caMainX->append(QDateTime::fromTime_t(---).toString("hh:mm"), ---);
	}
	m_caMainX->append(QDateTime::fromTime_t((---).toString("hh:mm"), ---);

	//设置y轴时间数据
	float fYLong = ---;
	for(float i=0; i<9; i++)
	{
		int iLong = iVolume / 8;
		m_caMainY->append(QString("%1").arg(iLong*i), ---);
	}
	for(float i=10; i<30; i++)
	{
		m_caMainY->append(QString("%1").arg(---), ---);
	}
	m_caMainY->append(QString("%1").arg(---), ---);//在y轴上下设置不同的两组数据

	m_caMainX->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue); //对齐
	m_caMainY->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);

	//添加轴,并把轴和数据系列连接 
	m_lsMainSeries->setPen(QPen(QBrush(Qt::white), 1, Qt::SolidLine));
	m_chart->addSeries(m_lsMainSeries);
	m_chart->setAxisX(m_caMainX, m_lsMainSeries);
	m_chart->setAxisY(m_caMainY, m_lsMainSeries);

	m_lsAveSeries->setPen(QPen(QBrush(Qt::yellow), 1, Qt::SolidLine));
	m_chart->addSeries(m_lsAveSeries);
	m_chart->setAxisX(m_caMainX, m_lsAveSeries); //均线和主线共轴
	m_chart->setAxisY(m_caMainY, m_lsAveSeries);

	m_lsYestSeries->setPen(QPen(QBrush(Qt::gray), 1, Qt::SolidLine));
	m_chart->addSeries(m_lsYestSeries);
	m_chart->setAxisX(m_caMainX, m_lsYestSeries); //昨结线和主线共轴
	m_chart->setAxisY(m_caMainY, m_lsYestSeries);

	m_chart->addSeries(m_lsHistogram);
	m_chart->setAxisX(m_bcBarX, m_lsHistogram); //柱状图和主线共Y轴,不共X轴
	m_chart->setAxisY(m_caMainY, m_lsHistogram);

	//设置坐标轴标签的字体
	QFont labelFont("Cambria", 10);
	m_chart->axisX()->setLabelsFont(labelFont);
	m_chart->axisY()->setLabelsFont(labelFont);
	m_chart->axisX()->setLabelsColor(QColor(187, 193, 199));
	m_chart->axisY()->setLabelsColor(QColor(255, 0, 0));

	//为序列设置坐标轴
	m_chart->setAnimationOptions(QChart::NoAnimation);
	m_chart->legend()->hide();
	m_chart->setBackgroundBrush(QColor(0, 0, 0));
	m_Ui->widget->setChart(m_chart);
	m_Ui->widget->setRenderHint(QPainter::Antialiasing); //设置消除锯齿,曲线平滑

数据部分可以先插入假数据看看效果,我的效果如下:

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值