目录
一、概念
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;
}