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