QChart使用经验总结

1.将QChartView setparent到指定的widget时, 假如是在构造函数就已经执行该操作,图表可以直接显示;但是假如是“运行时“才设置的(比如点击了某个按钮才设置),那么在setparent之后,还要调用一下chartView->show()才会显示出来

2.假如自定义了Y轴坐标实例(AxisY = new QValueAxis),然后设置为Y轴后( chart->setAxisY(AxisY)),此时设置range,柱状图的柱子不会相应地缩放。必须还要增加一句 series->attachAxis(AxisY); 也就是将数据与该坐标轴绑定,才会实现当range改变时,柱子也改变高度的情况。

3.设置了chart的动画效果之后,在刷新数据时(手动对坐标轴的最大最小值进行了修改 + 数据进行了更新替换)一定要先执行坐标轴的调整,然后再修改数据。否则动画会不执行。

4.在设置饼状图时,假如设置了动画效果,那么就算设置了饼的边界线为透明,结果还是会显示出(黑色)线条,目前发现想要变成透明只能通过设置penWidth为0.1(0也不行,0的话好像会自动变成1)

 chart->setAnimationOptions(QChart::AllAnimations);

 QPieSlice *slice = series->slices().at(0);
 slice->setExploded();
 slice->setLabelVisible(false);
 slice->setPen(QPen(Qt::transparent,  0));//设置线宽为0,结果还是会变成1的样子
 slice->setBrush(QColor("#ffff00"));

 series->slices().at(1)->setLabelVisible(false);
 series->slices().at(1)->setPen(QPen(Qt::transparent,  0.01));//设置0.1,基本就可以达到透明的效果
 series->slices().at(1)->setBrush(QColor(105, 219, 0));

QChart使用经验总结_第1张图片

5.设置饼状图的特殊效果(开始角度、中空等)可以参考代码:
代码来自Qt的自带例程:Nested donuts


  series->setHoleSize(0.1); //设置饼中间的洞的大小([0,1])
  series->setPieSize(0.6); //设置饼外边沿延伸的大小([0,1])

//角度的偏移
//! [6]
void Widget::updateRotation()
{
    for (int i = 0; i < m_donuts.count(); i++) {
        QPieSeries *donut = m_donuts.at(i);
        qreal phaseShift =  -50 + QRandomGenerator::global()->bounded(100);
        donut->setPieStartAngle(donut->pieStartAngle() + phaseShift);
        donut->setPieEndAngle(donut->pieEndAngle() + phaseShift);
    }
}
//! [6]

6.使能了柱状图(可能其他图也有这个情况)的动画之后,假如快速反复进行 “将旧的series删除,新的series的插入” 这两个操作,那么有可能会导致系统奔溃:

 QBarSeries *series = createSeries(titleData.second,  data);

//    mChart->setAnimationDuration(0);
//    mChart->setAnimationOptions(QChart::NoAnimation);

    mChart->removeAllSeries();

//    mChart->setAnimationDuration(300);
//    mChart->setAnimationOptions(QChart::SeriesAnimations);

    mChart->addSeries(series);

奔溃的原因进行调试过,发现是动画还没运行完,动画依赖的相应参考数据已经被删除了(我猜测的,不确定是不是)。唯二的法子就是缩短动画的时间、等动画运行完再删除。。。QChart使用经验总结_第2张图片

你可能感兴趣的:(Qt相关)