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));

可以看到饼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);

奔溃的原因进行调试过,发现是动画还没运行完,动画依赖的相应参考数据已经被删除了(我猜测的,不确定是不是)。唯二的法子就是缩短动画的时间、等动画运行完再删除。。。在这里插入图片描述
7.设置背景颜色时有两个地方可以设置,一个是QChart,一个是QChartView。可以自由组合。

    mChart->setBackgroundVisible(false);
    //mChart->setBackgroundBrush(QColor("#123456"));
    //mChart->setBackgroundRoundness(0);

    mChartView->setBackgroundBrush(QColor("#123456"));
//    mChartView->setStyleSheet("background: transparent; border:0px");

8.设置边界偏移。

    mChart = new QChart();
    mChart->setMargins(QMargins (0, 0, 0, 0)); //内边界
    mChart->layout()->setContentsMargins(0, 0, 0, 0);//设置外边界全部为0
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值