用Qt绘制柱状图

本文介绍了如何使用Qt框架来绘制柱状图。作者分享了一个简单的图表显示工具,能够展示任意数量的柱子,并提供了源代码下载链接,读者可以通过调整HistogramOptions类的参数来定制图表外观。
摘要由CSDN通过智能技术生成

Qt绘制柱状图

最近复习已经学习的Qt知识,制作了一个简单的图表显示工具。目前它能够很好地显示柱状图,其效果如下所示:


这个柱状图支持任意多的项目(柱子),只需要在代码中添加了相关数据后,使用Paint()函数就可以将其渲染成一个Pixmap,然后作为中央控件(centeralwidget)的一张图片显示出来。下面是源代码的下载地址:这里

如果对程序的实现感兴趣,那么看看我写的相关类吧。

#ifndef HISTOGRAM_H
#define HISTOGRAM_H
// Histogram.h 柱状图类的声明
// 名词解释:Histogram 柱状图
// pillar 柱子
#include <QVector>
// 前向声明
QT_BEGIN_NAMESPACE
class QColor;
class QRect;
class QString;
class QPaintDevice;
QT_END_NAMESPACE
class HistogramItem
{
    
public:
        QString m_Name;
        qreal   m_Value;
        QColor  m_PillarColor;
        QRect   m_PillarRect;
};
class Histogram
{
    
public:
        Histogram( void );
        void AddItem( QString name, qreal value,
                                  QColor pillarColor );
        void SetMaxValue( quint32 maxValue );   // 设置最大值,以便绘图
        void Paint( QPaintDevice* pDevice );    // 绘图
private:
        void DrawAxis( QPaintDevice* pDevice, QPainter* pPainter );
        void DrawPillars( QPaintDevice* pDevice, QPainter* pPainter );  // 绘制柱子
        void DrawText( QPainter *pPainter );            // 绘制文字
        void DrawScale( QPaintDevice* pDevice, QPainter* pPainter );
好的,我可以为您介绍一下在 Qt绘制柱状图并添加三角的方法。 首先,我们可以使用 `QPainter` 类来绘制柱状图。具体步骤如下: 1. 创建一个继承自 `QWidget` 的自定义控件。 2. 在 `paintEvent` 方法中创建一个 `QPainter` 对象。 3. 根据数据绘制柱状图。 4. 如果需要添加三角,可以使用 `QPolygonF` 类创建一个三角形的路径,然后使用 `QPainter` 的 `drawPolygon` 方法绘制出来。 下面是一个简单的代码示例,可以绘制一个简单的柱状图,并在顶部添加一个三角形: ```cpp void MyWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 绘制坐标轴 painter.drawLine(50, 250, 350, 250); painter.drawLine(50, 250, 50, 50); // 绘制柱状图 QVector<double> data = {20, 50, 80, 30, 70}; int spacing = 50; int width = 30; int x = 75; int y = 250; painter.setBrush(QBrush(Qt::blue)); for (int i = 0; i < data.size(); i++) { int height = data[i] * 2; painter.drawRect(x, y - height, width, height); x += spacing; } // 绘制顶部三角形 QPointF points[3] = { QPointF(150, 30), QPointF(165, 15), QPointF(180, 30) }; QPolygonF triangle(points, 3); painter.setBrush(QBrush(Qt::red)); painter.drawPolygon(triangle); } ``` 这里我们绘制了一个数据为 {20, 50, 80, 30, 70} 的柱状图,每个柱子之间的间距为 50,每个柱子的宽度为 30。在顶部添加了一个红色的三角形。您可以根据实际需求调整柱状图和三角形的位置和大小。 希望这个例子能够帮助到您!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值