Qt4中学习使用QtCharts绘图四:绘制柱状图

1、实例编写环境

操作系统:Windows 10 企业版
开发工具:Visual Studio 2010 旗舰版
开发环境:Qt4.8.6,QtCharts
编程语言:C++

2、实例涉及的内容

       本实例主要讲解通过QtCharts绘制面积图表,涉及的QtCharts的主要类有如下内容:QBarSet、QBarSeries、QBarCategoryAxis、QValueAxis、QChart、QChartView;

        QBarSet:表示一组条形图。一组条形图包含每个类别的一个数据值。假设set的第一个值属于第一类,第二类属于第二类,以此类推。如果set的值少于类别的值,则假定缺少的值在set的末尾。对于集合中间的缺失值,使用数值0;

        QBarSeries:表示以条形显示的一系列数据。该类的目的是将条形图作为组来绘制,其中同一类别中的条形图是挨个分组的。QBarSeries将数据从集合分组到类别,这些类别由QStringList定义;

        QBarCategoryAxis类用于操作图表的轴,可以设置为显示带有勾号、网格线和阴影的轴线,在刻度之间画出类别;

        QValueAxis类用于操作图表轴,可以设置为显示带有勾号、网格线和阴影的轴线,轴的值绘制到刻度的位置;

        QChart是一个可以在QGraphicscene中显示的控件;

        QChartView是一个可以显示图表的独立控件;

3、实例效果

实例效果图如下:

4、关键代码片段

    //组织数据//
    QBarSet *set0 = new QBarSet(QString::fromLocal8Bit("简"));
    QBarSet *set1 = new QBarSet(QString::fromLocal8Bit("约翰"));
    QBarSet *set2 = new QBarSet(QString::fromLocal8Bit("艾克斯"));
    QBarSet *set3 = new QBarSet(QString::fromLocal8Bit("玛丽"));
    QBarSet *set4 = new QBarSet(QString::fromLocal8Bit("萨曼莎"));
    *set0 << 1 << 2 << 3 << 4 << 5 << 6;
    *set1 << 5 << 0 << 0 << 4 << 0 << 7;
    *set2 << 3 << 5 << 8 << 13 << 8 << 5;
    *set3 << 5 << 6 << 7 << 3 << 4 << 5;
    *set4 << 9 << 7 << 5 << 3 << 1 << 2;

    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);
    series->append(set2);
    series->append(set3);
    series->append(set4);


    //图形中添加显示数据//
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setTitle(QString::fromLocal8Bit("柱状图绘制实例"));
    chart->setAnimationOptions(QChart::SeriesAnimations);


    //坐标轴//
    QStringList categories;
    categories << QString::fromLocal8Bit("1月") << QString::fromLocal8Bit("2月") << QString::fromLocal8Bit("3月")<<QString::fromLocal8Bit("4月")<< QString::fromLocal8Bit("5月")<<QString::fromLocal8Bit("6月");
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    axisX->append(categories);
    chart->addAxis(axisX, Qt::AlignBottom);
    series->attachAxis(axisX);

    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0,15);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);


    //显示图例//
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

 5、实例源码获取

       完整的实例代码,请在在笔者的下载中心搜索下载(查找本博客同名标题资源进行下载)。如有任何发现任何问题或者疑问,可以留言或者联系作者进行反馈哦!源码下载链接:点击下载

记得点赞收藏,谨防丢失哦!!!

好的,以下是一个用Qt绘制柱状图的示例代码: ```cpp #include <QApplication> #include <QWidget> #include <QPainter> class BarChart : public QWidget { public: BarChart(QWidget *parent = nullptr) : QWidget(parent) { setFixedSize(400, 300); } protected: void paintEvent(QPaintEvent *) override { QPainter painter(this); const int margin = 30; const int barWidth = (width() - 2 * margin) / m_values.size() - 10; const int maxValue = *std::max_element(m_values.begin(), m_values.end()); const int maxHeight = height() - 2 * margin; painter.setPen(Qt::black); painter.drawLine(margin, margin, margin, height() - margin); // y-axis painter.drawLine(margin, height() - margin, width() - margin, height() - margin); // x-axis for (int i = 0; i < m_values.size(); ++i) { int barHeight = static_cast<int>(m_values[i] * maxHeight / maxValue); int x = margin + i * (barWidth + 10); int y = height() - margin - barHeight; QRect rect(x, y, barWidth, barHeight); painter.fillRect(rect, Qt::blue); painter.drawRect(rect); } } public: void setValues(const std::vector<int>& values) { m_values = values; update(); } private: std::vector<int> m_values; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); BarChart chart; chart.setValues({ 10, 20, 30, 40, 50 }); chart.show(); return a.exec(); } ``` 在示例代码,我们继承了QWidget类,并重写了paintEvent函数进行绘图。我们使用QPainter类来绘制柱状图。在paintEvent函数,我们首先绘制了x轴和y轴。然后,我们根据数据值绘制柱状图。为了让柱状图看起来更好,我们给每个柱子留出了一定的空白。最后,我们通过调用update函数来刷新界面,使柱状图显示出来。 你可以根据需要修改该示例代码以满足你的需求。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值