VS+QT QChart使用

一、调用QCharts

VS项目右击->"Qt Project Setting"->切换"Qt Modules"->勾选"Charts"

包含头文件

#include <QChart>
#include <QLineSeries>
#include <QValueAxis>
#include <QCategoryAxis>

......

用什么就#include

using namespace QtCharts;或者QT_CHARTS_USE_NAMESPACE

ps:

1: #include <QValueAxis>与#include <QCategoryAxis>同项目不能#include “windows.h”,会报错

解决:#include “qt_windows.h”替换#include “windows.h”

2: 在子项目和启动项中都要调用QCharts,否则还是会报警

二、创建 QCharts  

1:弹出窗口 

QSplineSeries *LineSeries = new QSplineSeries();  //QSplineSeries 平滑曲线  QLineSeries折线
    for (double x = 0; x < 10; x += 0.1)
    {
        LineSeries->append(x, sin(x));
    }
    QChart *chart = new QChart();
    chart->addSeries(LineSeries);
    chart->legend()->hide();
    chart->createDefaultAxes();
    chart->setTheme(QChart::ChartThemeDark);

    QChartView *view = new QChartView(chart);  //创建视图,直接是一个窗口类型
    view->resize(600, 200);  //
    view->setWindowTitle(u8"正弦");
    view->setRenderHint(QPainter::Antialiasing);
    view->show();
 

 2:Graphics View提升

双击打开"mainwindow.ui";
向"MainWindow"中添加"Graphics View"部件, 并将部件的对象名称改为"chartView";
在刚添加的部件"chartView"上右键选择菜单"提升为…", 提升的类名称设置为"QChartView", 头文件设置为"qchartview.h", 点击"添加"按钮后点击"提升"按钮;

   QSplineSeries *LineSeries = new QSplineSeries();  //QSplineSeries 平滑曲线         QLineSeries折线
    for (double x = 0; x < 10; x += 0.1)
    {
        LineSeries->append(x, sin(x));
    }    QChart *chart = new QChart();
    chart->addSeries(LineSeries);
    chart->legend()->hide();
    chart->createDefaultAxes();
    chart->setTheme(QChart::ChartThemeDark);

    ui.chartView->setChart(chart);

    ui.chartView->setRenderHint(QPainter::Antialiasing);

 ps:用widget也是一样,都要提升,最终都是QChartView,使用widget提升简单测试没有问题;

3:不提升,代码创建

双击打开"mainwindow.ui";
向"MainWindow"中添加"Graphics View"部件

   QChartView *ChartView = new QChartView(ui.graphicsView);

    QHBoxLayout *pHLayout = new QHBoxLayout(ui.graphicsView);
    pHLayout->setContentsMargins(0, 0, 0, 0);
    pHLayout->addWidget(ChartView);
    ui.graphicsView->setLayout(pHLayout);

    QSplineSeries *LineSeries = new QSplineSeries();  //QSplineSeries 平滑曲线              QLineSeries折线
    for (double x = 0; x < 10; x += 0.1)
    {
        LineSeries->append(x, sin(x));
    }    QChart *chart = new QChart();
    chart->addSeries(LineSeries);
    chart->legend()->hide();
    chart->createDefaultAxes();
    chart->setTheme(QChart::ChartThemeDark);

   ChartView ->setChart(chart);

   ChartView ->setRenderHint(QPainter::Antialiasing);

三、初始化Qcharts

 1:初始化QChart

    QChart *m_pChart = new QChart();
    // 创建图表的各个部件

    //m_pChart->setTitleBrush(QBrush(QColor(0, 0, 255))); //设置标题Brush

    //m_pChart->setTitleFont(QFont("微软雅黑"));//设置标题字体

    m_pChart->setTitle(title);

    //m_pChart->legend()->setLabelColor(QColor(0, 100, 255)); //设置标签颜色
    //m_pChart->legend()->hide(); //隐藏图例(图例:标题下面显示的Series)

    m_pChart->setTheme(QChart::ChartThemeBlueCerulean);//设置图表主题

     图例被点击后触发
    //foreach(QLegendMarker* marker, m_pChart->legend()->markers())
    //{
    //    QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
    //    QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked()));
    //}

2:初始化 QChartView

    //绑定chart控件
    ui.chartView->setChart(m_pChart);// 将Chart添加到ChartView
    ui.chartView->setRenderHint(QPainter::Antialiasing);//反走样功能,调用反锯齿功能
    //ui.chartView->chart()->setAnimationOptions(QChart::SeriesAnimations);//设置动画模式
    //ui.chartView->chart()->setDropShadowEnabled(true);//设置是否有阴影

    ui.chartView->setViewportUpdateMode(QChartView::FullViewportUpdate);//用于指定当视图中的场景项的边界框发生变化

 ps:改变窗口大小出现重影问题,或者在显示Series标签(series->setPointLabelsVisible(true))的情况,append()数据时,标签显示不全问题,需要  ui.chartView->setViewportUpdateMode(QChartView::FullViewportUpdate)整个视口内进行更新,当然意味着更大的消耗,其默认值MinimalViewportUpdate:表示只更新发生变化的区域;

 3:初始化 QAbstractSeries

      QLineSeries *series = new QLineSeries();//创建直线序列
        series->setName(seriesList.at(i));
        // 其他附加参数
        series->setVisible(true);
        series->setPointLabelsFormat("@yPoint,@yPoint");//标签的显示格式也可只显示x或y
        series->setPointsVisible(true);       // 设置数据点可见
        series->setPointLabelsVisible(true);  // 设置数据点数值可见

        //QPen pen;
        //pen.setWidth(0);
        //series->setPen(pen);

        //series->setPen(QPen(Qt::NoPen));//画出的点不带轮廓

        m_pChart->addSeries(series);  // 序列添加到图表    

不同的图表其实就是不同QAbstractSeries的子类,其相对应的参数不一样,其他都差不多;把数据转化为不同序列,即可显示不同的图表。

4:初始化 QValueAxis

  自定义坐标轴

    QValueAxis *axisX = new QValueAxis;    // X轴
    axisX->setRange(0, 100);               // 设置坐标轴范围
    axisX->setTitleText("X轴标题");         // 标题
    //axisX->setLabelFormat("%d%");         // 设置x轴格式
    //axisX->setTickCount(11);                // 设置坐标轴主刻度的个数
   // axisX->setMinorTickCount(5);           //设置两个主刻度之间的次刻度的个数

    QValueAxis *axisY = new QValueAxis;    // Y轴
    axisY->setRange(0, 100);               // Y轴范围
    axisY->setTitleText("Y轴标题");         // 标题
    axisY->setTickCount(11);                // 设置坐标轴主刻度的个数

    m_pChart->addSeries(series);
     设置X于Y轴数据集
    m_pChart->setAxisX(axisX, series);   // 为序列设置坐标轴
    m_pChart->setAxisX(axisY, series);

或者

默认坐标轴

m_pChart->createDefaultAxes();

 m_pChart->axisX()->setRange(0, 100);

....//设置坐标轴各个参数

感觉以上两种创建坐标轴本质上一样,默认createDefaultAxes只是替换掉setAxisX、setAxisX,然后创建一个简单坐标轴,如果参数不合适还是需要重新设置参数;

ps:QxxxSeries必须要先加载至chart,再setAxisX/Y,否则没有图上没有数据。addSeries一定要在坐标轴添加到图表 之前;

四、其他 

QChartView用来显示数据;QChart用来组织数据。

QChart类用来管理图表的数据序列(series)、图例(legends)和坐标轴(axes)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值