(QT)QPainter与QChart图表

文章介绍了Qt中的QPainter类,用于在QWidget或QPixmap上绘制图形,包括设置抗锯齿、画笔颜色、形状等。同时,文章还展示了如何使用QtCharts模块创建曲线图、柱状图等图表,包括设置坐标轴、数据点和颜色。另外,文中还给出了文本滚动显示的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、概念

1、QPainter

2、QChat图表

二、使用

1、QPainter简单使用

2、实现文本滚动显示

3、QChart图表


一、概念

1、QPainter

QPainter是Qt框架中提供的一个绘图类,用于在QWidget或QPixmap等绘图设备上进行绘制。使用QPainter可以绘制各种形状、颜色、文本、图像等图形元素,并提供了一些常用的绘制函数,例如drawLine、drawRect、drawText等。

2、QChat图表

Qt Charts 很方便的绘制我们常见的曲线图、折线图、柱状图和饼状图等图表。

二、使用

1、QPainter简单使用

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter(this); //指定绘图对象

    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);

    QPen pen;//画笔
    pen.setWidth(5);//设置画笔宽度
    //pen.setColor(QColor("#888888"));//设置画笔颜色
    pen.setColor(QColor(200,100,50));//设置画笔颜色
    painter.setPen(pen);//给画家画笔

    QBrush brush(QColor(200,100,50));//颜色填充
    painter.setBrush(brush);//给画家刷子

    painter.drawRect(100,100,50,50);//画矩形    x   y   w  h

    QPolygon polygon1;//多边形
    polygon1.setPoints(3,100,20,200,50,300,300);
    painter.drawPolygon(polygon1);

    painter.drawLine(300,400,150,200);//画直线
    painter.drawEllipse(200,200,50,100);//画椭圆 x y r R

    QRectF rectF(0,0,200,100);//文字显示区域
    painter.drawText(rectF, Qt::AlignCenter,"画文字");//画文字,显示类型,水平居中

    QPainterPath path;//画曲线
    path.moveTo(20,80);
    path.lineTo(20,30);
    path.cubicTo(80,0,50,50,80,80);

    painter.drawPath(path);
}

2、实现文本滚动显示

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QFontMetrics>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , offset(0)
    ,textContent("QT学习实验文本滚动显示")
{
    ui->setupUi(this);

    timer = new QTimer(this);
    timer->start(10);//10ms触发一次timeout()信号

    //显示的文字宽度计算
    font.setPixelSize(50);
    QFontMetrics fontMetrics(font);
    textContentWidth = fontMetrics.width(textContent);

    connect(timer,SIGNAL(timeout()),this,SLOT(onTimerTimeOut()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter(this);
    QPen pen;
    pen.setColor(QColor(Qt::red));
    painter.setPen(pen);
    painter.setFont(font);

    QRectF rectF = this->rect();
    rectF.setLeft(rectF.width()-offset);

    painter.drawText(rectF,Qt::AlignVCenter,textContent);

}

void Widget::onTimerTimeOut()
{
    if(offset<this->width() + textContentWidth)
        offset++;
    else
        offset=0;

    this->update();//更新界面
}


3、QChart图表

要想在项目里使用 Qt Charts 模块,需要在 pro 文件下添加以下语句。

QT       += core gui charts

②主要代码

#include "widget.h"
#include "ui_widget.h"
#include <QValueAxis>
#include <QSplineSeries> //曲线
//#include <QLineSeries>   //折线

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1.创建一个图表视图
    // QChartView *chartView = new QChartView();

    // 2.创建-个图表
    QChart *chart=new QChart();

    // 3.创建坐标轴
    QValueAxis *valueAxisX=new QValueAxis();
    QValueAxis *valueAxisY=new QValueAxis();

    // 4.设置坐标轴的范围
    valueAxisX->setRange(0,5000);
    valueAxisY->setRange(0,100);

    // 5.设置坐标轴的标题和显示的格式
    valueAxisX->setTitleText("时间/ms");
    valueAxisY->setTitleText("温度/°C");
    valueAxisX->setLabelFormat("%d");
    valueAxisY->setLabelFormat("%d");

    //设置分度,默认5个
    valueAxisX->setTickCount(10);
    valueAxisY->setTickCount(10);

    // 6.图表添加坐标轴
    chart->createDefaultAxes();
    chart->addAxis(valueAxisX, Qt::AlignBottom);
    chart->addAxis(valueAxisY, Qt::AlignLeft);

    // 7.设置图表的标题以及图例显示是否需要
    chart->setTitle("温度与时间曲线");
    chart->legend()->setVisible(false);

    // 8.创建曲线对象添加它的点,设置曲线的颜色
    QSplineSeries *splineSeries = new QSplineSeries();
    splineSeries->append(0, 50);
    splineSeries->append(1000, 60);
    splineSeries->append(2000, 80);
    splineSeries->append(3000, 50);
    splineSeries->append(4000, 30);
    splineSeries->append(5000, 80);

    QPen pen(QColor(0xff5566));//设置曲线颜色
    splineSeries->setPen(pen);

    // 9.图表添加曲线
    chart->addSeries(splineSeries);

    // 10.将曲线的数据与坐标轴相连,这个要在图表添加曲线之后
    //附属到坐标轴上面去
    splineSeries->attachAxis(valueAxisX);
    splineSeries->attachAxis(valueAxisY);

    // 11.将图表放置于图表视图
    ui->chartView->setChart(chart);

}

Widget::~Widget()
{
    delete ui;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhang丶&|!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值