当前位置: 首页 > article >正文

QT基本绘图

QT绘图

1.概述

这篇文章介绍如何绘图

2.绘图基本操作

创建一个普通的widget类型的项目

在widget.h 文件中重写绘图事件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    
    ~Widget();
//    绘图事件
    void paintEvent(QPaintEvent *event);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp 文件中进行绘画

#include "widget.h"
#include "ui_widget.h"
//导入绘画类
#include <QPainter>

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

}

//重写绘画事件
void Widget::paintEvent(QPaintEvent *event)
{
//    实例化绘画对象,这个this指的是在Widget对象中绘画,它不是对象树。
    QPainter painter(this);
//    绘制直线
    painter.drawLine(QPoint(10,10), QPoint(100,10));

//    画椭圆,第一个参数中心点,第二个参数X轴,第三个参数y轴
    painter.drawEllipse(QPoint(100,100),50,80);

//    画圆,第一个参数中心点,第二个参数X轴,第三个参数y轴
    painter.drawEllipse(QPoint(200,300),80,80);

//    画矩形 前两个参数是起点位置,后两个参数是长度
    painter.drawRect(QRect(10,10,20,30));

//    画文字,第一个参数是x和y的起点位置,第二个参数是显示的文字
    painter.drawText(QPoint(30,30),"千里江陵一日还");


}

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


3.设置画笔

设置画笔使用QPen 类提供的函数,首先查看帮助手册,了解他有哪些功能可以设置。
在这里插入图片描述

1.设置画笔颜色
//    实例化绘画对象,这个this指的是在Widget对象中绘画,它不是对象树。
    QPainter painter(this);

//    设置画笔颜色
    QPen pen(QColor(255,255,0));
//    让绘画对象使用这个画笔
    painter.setPen(pen);

//    绘制直线
    painter.drawLine(QPoint(10,10), QPoint(100,10));
2.设置画笔宽度
//    设置宽度
    pen.setWidth(10);
3.设置画笔风格

通过帮助文档查看画笔风格有哪些样式,点击style函数,跳转到枚举值。
在这里插入图片描述
点击Qt::PenStyle查看penStyle风格
在这里插入图片描述
在这里插入图片描述

//    设置风格
    pen.setStyle(Qt::DashLine);

在这里插入图片描述

4.设置画刷

查看帮助手册,QBrush类提供的画刷功能。
在这里插入图片描述

//    设置画刷对象
    QBrush brush(Qt::green);

//    设置画刷样式
    brush.setStyle(Qt::Dense7Pattern);

//    让画家使用画刷
    painter.setBrush(brush);

效果展示
在这里插入图片描述

5.其他设置
/******************绘画高级用法*******************************/
    QPainter painter2(this);
//    消除锯齿
    painter2.setRenderHint(QPainter::HighQualityAntialiasing);
    painter2.drawEllipse(QPoint(500,500),30,30);

    painter2.drawRect(QRect(10,550,10,20));
//    移动画家在画布上的位置
    painter2.translate(20,0);
    painter2.drawRect(QRect(10,550,10,20));

//    保存画家当前的状态
    painter2.save();
//    上面保存了画家的状态,所以再次绘画时他的起始位置不是0,上面的20,0
    painter2.drawRect(QRect(10,550,10,20));

4.手动调用绘图事件

上面介绍的是通过绘图事件自动调用绘图工具进行绘画,当我们希望手动通过某个控件去触发绘图事件去绘画时,使用信号和槽实现。

事项的功能:我们使用按钮控制绘制的矩形向右移动,当点击一下按钮,矩形向右移动一次。

widget.ui文件中添加一个pushButon按钮控件
在这里插入图片描述

widget.cpp 文件中绘制一个矩形,为了让矩形向右移动,将X轴坐标值定义为变量,每次点击按钮就改变这个x轴的值。

widget.h文件中新建变量

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);

    ~Widget();
//    绘图事件
    void paintEvent(QPaintEvent *event);
//    设置x轴移动变量
    int posx = 0;

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp 文件中绘制一个矩形

//重写绘画事件
void Widget::paintEvent(QPaintEvent *event)
{

    QPainter painter3(this);
    posx+=100;
//    当绘图超出屏幕显示区域后,重新设置他的位置
    if(posx > this->width())
    {
        posx = 0;
    }
    painter3.drawRect(QRect(posx,100,60,60));
}

widget.cpp 文件中构造器中创建信号和槽,每点击一次按钮让矩形向右移动一次。

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

    connect(ui->pushButton,&QPushButton::clicked,[=](){
//        手动调用绘图事件用update
        update();
    });

}

效果展示,点击按钮后矩形向右移动了。
在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/401011.html

相关文章:

  • 统信UOS开发环境支持Golang
  • 编程语言02:语法基础
  • golang开源框架:go开源验证框架validator
  • SDF,一个从1978年运行至今的公共Unix Shell
  • Java-异步方法@Async+自定义分布式锁注解Redission例子
  • C指针之舞——指针探秘之旅
  • k8s 1.26安装
  • 集群聊天服务器(11)客户端开发
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04
  • 小程序-基于java+SpringBoot+Vue的实习生管理系统设计与实现
  • 网络安全等级测评师
  • vue3的setup、ref、reactive
  • RDD转换算子:join方面的算子(leftOuterJoin、rightOuterJoin、fullOuterJoin)
  • Spring Boot汽车资讯:驾驭信息新浪潮
  • 【网络安全 | 漏洞挖掘】在重置密码流程利用请求头实现ATO
  • 软件测试丨Java常用库
  • webgis与纯前端相比如何?
  • 网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机
  • 【pytest】pytest注解使用指南
  • AI 技术在旅游和酒店行业的应用前景
  • 如何利用WebSockets实现高效的实时通信应用
  • docker 安装之 windows安装
  • MySQL深度剖析-索引原理由浅入深
  • Qt-QWidget中的属性和方法
  • 【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)
  • 【第六课】Rust所有权系统(二)