学习一下Qt Charts的柱状图部分。参考书籍:Qt5.9 C++开发指南
效果图
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCharts/QChart>
using namespace QtCharts;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void createQBoxPlotSeries();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
#include <QBoxPlotSeries>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QBoxSet>
#include <QBarCategoryAxis>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
createQBoxPlotSeries();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::createQBoxPlotSeries()
{
//基本设置
ui->chartViewBoxPlot->setRenderHint(QPainter::Antialiasing);
ui->chartViewBoxPlot->chart()->setTitle(QStringLiteral("QBoxPlotSeries演示"));
ui->chartViewBoxPlot->chart()->setTheme(QChart::ChartThemeDark);
//创建序列和数据集,并向序列添加数据
qsrand(time(NULL));
QDateTime now = QDateTime::currentDateTime();
QBoxPlotSeries *boxPlotSeries = new QBoxPlotSeries;
boxPlotSeries->setName(QStringLiteral("火柴盒图"));
for (int i = 0; i < 13; i++)
{
QString label = now.addMSecs(1000*60*5*i).toString("hh:mm");
int value = qrand() % 100;
qDebug() << value;
QBoxSet *boxSet = new QBoxSet(label);
//需要设置这五个值
boxSet->setValue(QBoxSet::LowerExtreme, value * 0.2);
boxSet->setValue(QBoxSet::UpperExtreme, value);
boxSet->setValue(QBoxSet::Median, value * 0.5);
boxSet->setValue(QBoxSet::LowerQuartile, value * 0.25);
boxSet->setValue(QBoxSet::UpperQuartile, value * 0.75);
boxPlotSeries->append(boxSet);
}
ui->chartViewBoxPlot->chart()->addSeries(boxPlotSeries);
ui->chartViewBoxPlot->chart()->createDefaultAxes();
ui->chartViewBoxPlot->chart()->axes(Qt::Vertical).first()->setRange(0, 100);
ui->chartViewBoxPlot->chart()->axes(Qt::Vertical).first()->setTitleText(QStringLiteral("值"));
ui->chartViewBoxPlot->chart()->axes(Qt::Horizontal).first()->setRange(0, 13);
ui->chartViewBoxPlot->chart()->axes(Qt::Horizontal).first()->setTitleText(QStringLiteral("时间"));
}