前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt官方示例-图表主题

Qt官方示例-图表主题

作者头像
Qt君
发布2019-10-23 19:43:59
9300
发布2019-10-23 19:43:59
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

示例可以设置图表的系统内置主题。

0x00 主题样式预览

  • Light主题
  • Blue Cerulean主题
  • Dark主题
  • Brow Sand主题
  • Blue NCS主题
  • High ontrast主题
  • Blue Icy主题
  • Qt主题
0x01 创建图表

  以面积图为例。

  • 需要创建QChart类作为面积图图表容器。
代码语言:javascript
复制
QChart *chart = new QChart();
chart->setTitle("Area chart");
  • 创建QLineSeriesQAreaSeries实例装载数据。
代码语言:javascript
复制
for (int i(0); i < m_dataTable.count(); i++) {
    QLineSeries *upperSeries = new QLineSeries(chart);
    for (int j(0); j < m_dataTable[i].count(); j++) {
        Data data = m_dataTable[i].at(j);
        if (lowerSeries) {
            const QVector<QPointF>& points = lowerSeries->pointsVector();
            upperSeries->append(QPointF(j, points[i].y() + data.first.y()));
        } else {
            upperSeries->append(QPointF(j, data.first.y()));
        }
    }
    QAreaSeries *area = new QAreaSeries(upperSeries, lowerSeries);
    area->setName(name + QString::number(nameIndex));
    nameIndex++;
    chart->addSeries(area);
    lowerSeries = upperSeries;
}
  • 设置默认坐标轴和坐标轴范围。
代码语言:javascript
复制
chart->createDefaultAxes();
chart->axes(Qt::Horizontal).first()->setRange(0, m_valueCount - 1);
chart->axes(Qt::Vertical).first()->setRange(0, m_valueMax);
  • 设置坐标轴的标签格式。
代码语言:javascript
复制
QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
Q_ASSERT(axisY);
axisY->setLabelFormat("%.1f  ");
0x02 设置主题

  用户可以可以选择系统中的内置主题。然后将此主题应用于布局中的所有图表。

  • 配置组合框中的内置主题。
代码语言:javascript
复制
// add items to theme combobox
m_ui->themeComboBox->addItem("Light", QChart::ChartThemeLight);
m_ui->themeComboBox->addItem("Blue Cerulean", QChart::ChartThemeBlueCerulean);
m_ui->themeComboBox->addItem("Dark", QChart::ChartThemeDark);
m_ui->themeComboBox->addItem("Brown Sand", QChart::ChartThemeBrownSand);
m_ui->themeComboBox->addItem("Blue NCS", QChart::ChartThemeBlueNcs);
m_ui->themeComboBox->addItem("High Contrast", QChart::ChartThemeHighContrast);
m_ui->themeComboBox->addItem("Blue Icy", QChart::ChartThemeBlueIcy);
m_ui->themeComboBox->addItem("Qt", QChart::ChartThemeQt);
  • 设置组合框中的内置主题样式。
代码语言:javascript
复制
QChart::ChartTheme theme = static_cast<QChart::ChartTheme>(
            m_ui->themeComboBox->itemData(m_ui->themeComboBox->currentIndex()).toInt());
//![6]
const auto charts = m_charts;
if (!m_charts.isEmpty() && m_charts.at(0)->chart()->theme() != theme) {
    for (QChartView *chartView : charts) {
        //![7]
        chartView->chart()->setTheme(theme);
0x03 设置图表动画

  可以设置每个图表上动画类型。

  • 组合框动画类型:
  1. 没有动画;
  2. 网格轴动画;
  3. 系列动画;
  4. 或者两者都有。
代码语言:javascript
复制
m_ui->animatedComboBox->addItem("No Animations", QChart::NoAnimation);
m_ui->animatedComboBox->addItem("GridAxis Animations", QChart::GridAxisAnimations);
m_ui->animatedComboBox->addItem("Series Animations", QChart::SeriesAnimations);
m_ui->animatedComboBox->addItem("All Animations", QChart::AllAnimations);
  • 遍历设置全部图表动画。
代码语言:javascript
复制
QChart::AnimationOptions options(
            m_ui->animatedComboBox->itemData(m_ui->animatedComboBox->currentIndex()).toInt());
if (!m_charts.isEmpty() && m_charts.at(0)->chart()->animationOptions() != options) {
    for (QChartView *chartView : charts)
        chartView->chart()->setAnimationOptions(options);
}
0x04 设置图表额外信息

  显示图表的额外信息在不同侧面

  • 可以设置不同侧面显示图表信息。
代码语言:javascript
复制
m_ui->legendComboBox->addItem("No Legend ", 0);
m_ui->legendComboBox->addItem("Legend Top", Qt::AlignTop);
m_ui->legendComboBox->addItem("Legend Bottom", Qt::AlignBottom);
m_ui->legendComboBox->addItem("Legend Left", Qt::AlignLeft);
m_ui->legendComboBox->addItem("Legend Right", Qt::AlignRight);
  • 遍历设置全部图表的侧面显示。
代码语言:javascript
复制
Qt::Alignment alignment(
            m_ui->legendComboBox->itemData(m_ui->legendComboBox->currentIndex()).toInt());

if (!alignment) {
    for (QChartView *chartView : charts)
        chartView->chart()->legend()->hide();
} else {
    for (QChartView *chartView : charts) {
        chartView->chart()->legend()->setAlignment(alignment);
        chartView->chart()->legend()->show();
    }
}
0x05 图表抗锯齿

  抗锯齿开启后会对性能造成影像但会改善显示效果。

代码语言:javascript
复制
bool checked = m_ui->antialiasCheckBox->isChecked();
for (QChartView *chart : charts)
    chart->setRenderHint(QPainter::Antialiasing, checked);
0x06 关于更多
  • 在QtCreator软件可以找到:
  • 或在以下Qt安装目录找到
代码语言:javascript
复制
C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\charts\chartthemes
  • 相关链接
代码语言:javascript
复制
https://doc.qt.io/qt-5/qtcharts-chartthemes-example.html
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 创建图表
  • 0x02 设置主题
  • 0x03 设置图表动画
  • 0x04 设置图表额外信息
  • 0x05 图表抗锯齿
  • 0x06 关于更多
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档