如何用Qt QChart轻松创建图表?
摘要:Qt QChart 创建图表 @ 效果 流程 graph LR q(value 数据) q-->s1(QPieSlice)-->ps(QPieSeries)--饼状图-->c
Qt QChart 创建图表
@
目录Qt QChart 创建图表效果流程代码1. 饼图2. 柱图3. 折/曲线图4. 区域图
效果
流程
graph LR
q(value 数据)
q-->s1(QPieSlice)-->ps(QPieSeries)--饼状图-->c(QChart)-->v(QChartView)-->w(QWidget)
q-->s2(...)-->ps
q-->bs(QBarSet)-->b(QBarSeries)--柱状图-->c
q-->bs1(...)-->b
q-->p(QPointF)-->l(QLineSeries/QSplineSeries)--折/曲线图-->c
q-->p1(...)-->l
l1(QLineSeries upper)-->a(QAreaSeries)--区域图-->c
l2(QLineSeries lower)-->a
代码
1. 饼图
// 保存多个扇形
QList<QPieSlice *> slices;
for (int i = 1; i <= 10; ++i)
{
// 创建一个扇形
QPieSlice * slice = new QPieSlice(QString::number(i),i);
slices << slice;
}
// 创建一个饼图系列
QPieSeries * pieSeries = new QPieSeries;
// 当鼠标悬浮时设置标签可见,设置饼图扇形分离
QObject::connect(pieSeries,&QPieSeries::hovered
, [](QPieSlice *slice, bool state) {
slice->setLabelVisible(state);
slice->setExploded(state);
});
// 将所有扇形所加到饼图中
pieSeries->append(slices);
// 创建一个图表
QChart * chart = new QChart;
// 设置标题
chart->setTitle(QStringLiteral("饼图"));
// 设置动画
chart->setAnimationOptions(QChart::AllAnimations);
// 设置图表的系列
chart->addSeries(pieSeries);
// 创建图表视图,显示图表
pView = new QChartView(chart);
// 设置抗锯齿
pView->setRenderHint(QPainter::Antialiasing);
// 添加图表视图到布局
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(pView);
2. 柱图
// 保存柱集合
QList<QBarSet *> sets;
for (int i = 1; i <= 5; ++i)
{
// 创建一个柱集合
QBarSet * set = new QBarSet(QString("set").append(QString::number(i)));
QList<qreal> values;
for (int j = 1; j <= 5; ++j)
{
values << qrand()%100;
qDebug() << values;
}
set->append(values);
sets << set;
}
// 创建一个柱图系列
QBarSeries * barSeries = new QBarSeries;
// 添加柱集合
barSeries->append(sets);
QChart * chart = new QChart;
chart->setTitle(QStringLiteral("柱状图"));
chart->setAnimationOptions(QChart::AllAnimations);
chart->addSeries(barSeries);
pView = new QChartView(chart);
