memo

プログラミング備忘録

【Qt】QChart 棒グラフ

QChartで棒グラフを作ってみました。備忘録としてメモ。

表示させたいクラスのuiにwidgetを作成し、QChartViewクラスを継承した自作クラス(Chartクラス)に格上げしました。

f:id:shinopikapi:20210509190308p:plain
widgetを自作クラスに格上げ

.proに「QT += charts」を追加します。
その自作のChartクラスに以下のように関数を書いて、表示させたいwidgetのあるクラスから関数を呼んでます。

f:id:shinopikapi:20210509185241p:plain
chart1

呼び出しクラスから、init()を呼びます。
chart.cpp

void Chart::init()
{
    // bar
    int num_bar = 12;
    int num_seri = num_bar/2;
    QChart *chart = new QChart();

    // bar
    QBarSet *bar[num_bar];
    for(int i=0; i<num_bar; i++){
        // name
        bar[i] = new QBarSet("no"+(i+1));
        // value
        bar[i]->append(100*(i+1));
        // bar color
        //bar[i]->setBrush();
    }

    // series
    QBarSeries *barseri[num_seri];
    for(int i=0; i<(num_seri); i++){
        barseri[i] = new QBarSeries();
        barseri[i]->append(bar[(i*2)]);
        barseri[i]->append(bar[(i*2)+1]);
        chart->addSeries(barseri[i]);
    }

    // y軸
    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(-1000,1000);
    chart->addAxis(axisY, Qt::AlignLeft);

    for(int i=0; i<(num_seri); i++){
        barseri[i]->attachAxis(axisY);
    }

    // chart color
    QBrush back("#002b80");
    chart->setBackgroundBrush(back);

    // 凡例非表示
    chart->legend()->setVisible(false);

    this->setChart(chart);
}

いまだにマクロはよくわかっていません……。
chart.h

#include <QWidget>
#include <QtCharts>
#include <QChartView>
#include <QBarSet>

class Chart : public QChartView
{
    Q_OBJECT
    //QT_CHARTS_USE_NAMESPACE

public:
    explicit Chart(QWidget *parent = 0);

    void init();
~略~

QBarSetは12回インスタンス生成しているのですが、最初は1つにデータ12個挿入して、一つ一つ色を変えたかったのです。
でも、棒一つずつ色を変えるのが大変そうで自力ですっと色変えられていないので、結局一つずつ生成しました。
今度は棒の値毎に色を変える、とか棒の後ろの線(名前わからん)とか装飾を色々試してみようと思います。

参考(公式)
QChart Class | Qt Charts 5.15.3