テーマでチャートを作成する

注: これはCharts with Widgets Galleryの例の一部です。

ここでは、サポートされているチャート・タイプのいくつかについて、さまざまな組み込みテーマのルック&フィールを変更します。

チャートの作成

異なるタイプのチャートは別々に生成され、レイアウトに追加されます。例えば、折れ線グラフは次のように作成されます。他の種類のチャートの作成も同様です。

まずチャートが作成される。

auto chart = new QChart;
chart->setTitle("Line Chart");

共通のランダム・データが生成され、リストに入れられる。このリストは、各チャート・タイプで、チャートの系列にデータを追加するために使われる。線分系列については、QLineSeries インスタンスが作成され、チャートに追加される。

QString name("Series ");
int nameIndex = 0;
for (const DataList &list : m_dataTable) {
    auto series = new QLineSeries(chart);
    for (const Data &data : list)
        series->append(data.first);
    series->setName(name + QString::number(nameIndex));
    nameIndex++;
    chart->addSeries(series);
}

線分系列には、デフォルトの軸が作成される。また、系列に使用されるデータの範囲に基づいて、軸の範囲を指定します。

chart->createDefaultAxes();
chart->axes(Qt::Horizontal).first()->setRange(0, m_valueMax);
chart->axes(Qt::Vertical).first()->setRange(0, m_valueCount);

また、ラベルとY軸の間にスペースを追加したい。そのために、ラベルにスペース文字を追加するラベル・フォーマットを指定します。

// Add space to label to add space between labels and axis
auto axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).first());
Q_ASSERT(axisY);
axisY->setLabelFormat("%.1f  ");

最後に、折れ線グラフをグリッド・レイアウトに追加します。

chartView = new QChartView(createLineChart(), this);
m_ui->gridLayout->addWidget(chartView, 1, 2);

テーマの変更

ユーザーは、この例で使用する組み込みテーマを選択することができる。このテーマは、レイアウト内のすべてのチャートに適用される。

auto theme = static_cast<QChart::ChartTheme>(
            m_ui->themeComboBox->itemData(m_ui->themeComboBox->currentIndex()).toInt());
    ...
chartView->chart()->setTheme(theme);

アニメーション、凡例、アンチエイリアスの変更

この例では、アニメーション、凡例、アンチエイリアスを変更することが、チャートの外観にどのように影響するかを見ることもできる。

ユーザーの選択に基づいて、使用されるアニメーション・タイプが各チャートに設定されます。チャートにアニメーションを表示しないことも、グリッド軸や系列にアニメーションを表示することも、その両方を表示することもできる。

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

チャートは凡例とともに表示できる。凡例は、チャートのさまざまな側に整列させることができる。

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

アンチエイリアス・オプションを変更すると、チャートの外観がどのように変わるかを見ることもできる。アンチエイリアスはユーザーの選択に基づいて更新されます。

bool checked = m_ui->antialiasCheckBox->isChecked();
for (QChartView *chart : charts)
    chart->setRenderHint(QPainter::Antialiasing, checked);

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。