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); //设置消除锯齿,曲线平滑
数据部分可以先插入假数据看看效果,我的效果如下: