【QT】绘画事件/刷新界面

绘图事件

  1. QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。
  2. QPaintEngine类应用于QPainter和QPaintDevice之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关心QPaintEngine这个类的。
  3. 我们可以把QPainter理解成画笔;把PaintDevice理解成使用画笔的地方,比如纸张、屏幕等;而对于纸张、屏幕而言,肯定要使用不同的画笔绘制,为了统一使用一种画笔,我们设计了QPaintEngine类,这个类让不同的纸张,屏幕都能使用一种画笔。

在这里插入图片描述

上面的示意图告诉我们,Qt的绘图系统实际上是,使用QPainter在QPainterDevice上进行绘制,它们之间使用QPaintEngine进行通讯(也就是翻译QPainter的指令)。

从Object派生类,均可以用内存回收机制

在这里插入图片描述

如果想要在当前窗口中画图,我们需要重载一个虚函数。

用样式表来让背景图随着窗口缩放

Rect表示不带小数点

RectF表示可以带小数点

在这里插入图片描述


protected:
    /*
     * 1.回调函数
     * 2.此函数不要用户与调用,在刷新窗口的时候会自动调用
     *   1.窗口显示的时候
     *   2.最大化,最小化
     *   3.窗口被遮挡,重新显示出来的时候
     * ......
     * 3.如果想使用画家类画图,操作必须在paintEvent中完成
     * */
    void paintEvent(QPaintEvent*);

画家类/画笔类

最重要的一点:一定要重写

**void paintEvent(QPaintEvent*);!!!!!!**
#include <QPainter>
#include <QPen>
  //创建画家类对象   默认画笔为黑色
    QPainter p(this);  //指定绘画设备

    //设置新画笔
    QPen pen;

    pen.setColor(QColor(0,255,200));
    pen.setWidth(10);
    pen.setStyle(Qt::DashDotLine);
 //设置新画笔     
p.setPen(pen);

画图形

 //创建画家类对象   默认画笔为黑色
    QPainter p(this);  //指定绘画设备
   //画背景图
    p.drawPixmap(0,0,QPixmap(":/image/43.jpg"));

    //画直线
    p.drawLine(QPoint(100,100),QPoint(300,400));
    //画椭圆
    p.drawEllipse(QPoint(200,200),100,50);

    //画矩形
    p.drawRect(400,200,200,200);

填充图形颜色

#include <QBrush>
//填充图形颜色(画刷)
    //QBrush qb(Qt::yellow);
//填充图片
    QBrush qb(QPixmap(":/image/87.jpg"));
    p.setBrush(qb);

在这里插入图片描述

字体类

#include <QFont>

QFont qf("华文彩云",50,75,true);
p.setFont(qf);
p.drawText(400,300,"云想衣裳花想容");

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include <QPaintDevice>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QFont>
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
    //创建画家类对象   默认画笔为黑色
    QPainter p(this);  //指定绘画设备

    //设置新画笔
    QPen pen;

    pen.setColor(QColor(0,255,200));
    pen.setWidth(10);
    pen.setStyle(Qt::DashDotLine);

    p.setPen(pen);

    //填充图形颜色(画刷)
    //QBrush qb(Qt::yellow);
    QBrush qb(QPixmap(":/image/87.jpg"));
    p.setBrush(qb);

    //画背景图
    p.drawPixmap(0,0,QPixmap(":/image/43.jpg"));

    //画直线
    p.drawLine(QPoint(100,100),QPoint(300,400));
    //画椭圆
    p.drawEllipse(QPoint(200,200),100,50);

    //画矩形
    p.drawRect(400,200,200,200);
    //设置字体
    QFont qf("华文彩云",50,75,true);
    p.setFont(qf);
   //写字
    p.drawText(400,300,"云想衣裳花想容");

    int width = this->width();
    int height = this->height();

    qDebug()<<width<<height;

}

在这里插入图片描述


private:
    Ui::Widget *ui;
    int x;
};

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{  x = 20;
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,[=](){
         //刷新窗口
        this->update();//update以后系统会调用painEvent

    });
}

void Widget::paintEvent(QPaintEvent *)
{
    //创建画家类对象   默认画笔为黑色
    QPainter p(this);  //指定绘画设备
     x+=100;
    if(x  > this->width())
    {
        x = 20;
    }
    p.drawPixmap(x,100,200,200,QPixmap(":/image/43.jpg"));

刷新界面

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/439529.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode HOT150

55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1 …

202006青少年软件编程(Scratch)等级考试试卷(一级)

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;一级&#xff09;2020年6月 第1题&#xff1a;【 单选题】 下面哪个按钮可以运行Scratch脚本&#xff08; &#xff09; A: B: C: D: 【正确答案】: C 【试题解析】 : 第2题&#xff1a;【 单…

算法归纳【数组篇】

目录 二分查找1. 前提条件&#xff1a;2. 二分查找边界 2.移除元素有序数组的平方长度最小的子数组59.螺旋矩阵II54. 螺旋矩阵 二分查找 参考链接 https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF 1. 前提条件&#xff1a; 数…

深入了解Python的eval函数:基础用法与潜在危险【第118篇—eval函数】

深入了解Python的eval函数&#xff1a;基础用法与潜在危险 在Python中&#xff0c;eval函数是一个强大而灵活的工具&#xff0c;它允许将字符串作为代码来执行。然而&#xff0c;虽然eval在某些情况下非常方便&#xff0c;但它也潜藏着一些潜在的危险&#xff0c;如果不小心使…

php反序列化-字符逃逸看这一篇就够了

反序列化的特性 <?php /* $_SESSION["user"] guest; $_SESSION[function] highlight_file; $_SESSION[img] base64_encode(/d0g3_fllllllag); //d0g3_f1ag.php $serialize_info serialize($_SESSION);echo $serialize_info;*/$str a:3:{s:4:"user&quo…

TikTok播放量低?快来学习提高TikTok账号权重?

许多TikTok账号运营者都会遇到一个难题&#xff0c;那就是视频要么播放量很低&#xff0c;要么0播放&#xff01;不管内容做的多好&#xff0c;最好都是竹篮打水一场空&#xff01;其实你可能忽略了一个问题&#xff0c;那就是账号权重。下面好好跟大家讲讲这个东西&#xff01…

Dynamo小试牛刀(二)——曲线补充

上次写的比较匆忙&#xff0c;只是整理了几个小的例子&#xff0c;并没有过多的说明&#xff0c;这次稍微补充一点&#xff0c;一步步带着你做。 首先需要了解 Math 系列的节点用法&#xff0c;有&#xff1a; Math.sin/cos——正弦 / 余弦 Math.RadiansToDegrees——将弧度转换…

总结Redis的原理

一、为什么要使用Redis 缓解数据库访问压力mysql读请求进行磁盘I/O速度慢&#xff0c;给数据库加Redis缓存&#xff08;参考CPU缓存&#xff09;&#xff0c;将数据缓存在内存中&#xff0c;省略了I/O操作 二、Redis数据管理 2.1 redis数据的删除 定时删除惰性删除内存淘汰…

第四篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas生物信息学领域应用

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas生物学数据操作应用介绍二、数据加载与清洗示例代码三、数据分析与统计示例代码四、数据可视化示例代码五、基因组数据分析示例代码六、蛋白质数据分析示例代码七、生物医学图像…

记一次edu证书站的挖洞经历

前言 前几天在网上冲浪的时候无意间看到了一个Edu的站点&#xff0c;是一个很常见的类似MOOC的那种在线学习系统&#xff0c;对外开放&#xff0c;同时有注册和登录功能。对于我这种常年低危的菜鸡来说&#xff0c;这是最愿意看到的&#xff0c;因为一个Web网站有了登录功能&a…

基于Redis自增实现全局ID生成器(详解)

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P48 - P49 目录 全局ID生成器介绍 基于Redis自增实现全局ID 实现代码 全局ID生成器介绍 背景介绍 当用户在抢购商品时&#xff0c;就会生成订单并保存到数据库的某一张表中&#…

基于sprinbgoot的火锅店管理系统(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

模块自动导入

看的短视频&#xff0c;自己试了下&#xff0c;发现挺好用的&#xff1a;模块自动导入【渡一教育】_哔哩哔哩_bilibili 1. 安装插件 npm i unplugin-auto-import 2. 在vite配置文件&#xff08;vite.config.ts&#xff09;中进行配置&#xff0c; 配置完场后&#xff0c;需要重…

QT和OPENGL安装和集成

1.QT安装 1.1官网下载&#xff1a; 网址&#xff1a;https://download.qt.io/archive/qt/ 1.2 开始安装 点击运行 首先注册sign up 然后Login in 选择安装目录 改为D盘&#xff1a; 选择安装项&#xff1a; 准备安装 开始安装&#xff1a; 安装完成&#xff1a; 1.3测试 …

知行之桥EDI系统数据库进阶功能——动态更新

在知行之桥EDI系统中常用的数据库端口包括&#xff1a;MySQL端口、SQLServer端口以及SQLite端口。本文将为大家介绍数据库端口的进阶功能&#xff0c;通过简单配置实现数据库的动态更新。 实现SQLServer的动态更新 创建一个SQLServer端口&#xff0c;在 设置 选项卡下创建连接…

Python数据分析库之pandera使用详解

概要 在数据科学和数据分析中,数据的质量至关重要。不良的数据质量可能导致不准确的分析和决策。为了确保数据的质量,Python Pandera 库应运而生。本文将深入介绍 Python Pandera,这是一个用于数据验证和清洗的库,并提供丰富的示例代码,帮助大家充分利用它来提高数据质量…

北斗卫星引领智能油气管线革新

北斗卫星引领智能油气管线革新 现代化的油气管线系统已成为国家经济发展的重要基础设施&#xff0c;而北斗卫星则为这些管线注入了新的活力。北斗卫星作为中国自主研发的卫星导航定位系统&#xff0c;其准确度和稳定性在全球范围内享有盛誉。在智能化时代的背景下&#xff0c;…

B 站画质补完计划:视频超分让像素细腻生动

目前, 超分算法已成功投入线上点播业务,并已支持了大量视频的高分辨率视频流生产。未来,我们将持续在覆盖范围、主观效果和部署灵活度等方面进行算法的迭代更新,以在直播、点播、应用端等多个场景为视频画质提供更大的增益。 1 前言 为了给用户提供更清晰的画质体验,B站自…

Tablesgenerator 使用

1.在线工具网站 Create LaTeX tables online – TablesGenerator.com 2.按住 shift 选择边框 3.选择标题和双栏布局 4.保存和加载表格 5.默认风格与三线表 Default table style使用 \hline 而 Booktabs 使用 \toprule、\midrule和\bottomrule。 \toprule、\midrule和 \botto…

echarts x轴名称过长tip显示全称

xAxis的axisLabel的内容如下&#xff1a; axisLabel: { rotate: -45, color: document.body.className.indexOf(custom-f4c46d) > -1 ? #fff : #343434, // 显示省略号操作&#xff08;第一步&#xff09; formatter: function (value) { var val if (value.length >…