Qt编程,事件过滤器、绘图

news/2024/12/31 0:11:38/

3 事件过滤器

       1) 安装事件过滤器

              le->installEventFilter(this);  //从QObject继承出来的对象,可以注册一个事件过滤器,所有的事件先交给事件过滤器处理

       2) 重写事件过滤器

       /*

       参数:

              watched: 对象

              event: 事件

       返回值:

              true: 事件已处理

              false: 事件未处理

       */

       bool Widget::eventFilter(QObject *watched, QEvent *event)

       {

              if (event->type() == QEvent::KeyPress)

              {

                     //通过watched判断是否是关注的对象产生了事件

                     //通过event判断是否是关注的事件产生了

                     //如果是想要关注的对象产生了想要关注的事件则进行处理,处理完毕返回true

 QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);if (keyEvent->key() >= Qt::Key_0 && keyEvent->key() <= Qt::Key_9){qDebug() << (char)(keyEvent->key());QString tmp = ui->te2->toPlainText();tmp += QString(QChar(keyEvent->key()));ui->te2->setText(tmp);return true;//返回true意味这事件处理完毕,这个事件不会再继续处理}} 

              //对于不关心的事件,记得最后要调用基类的事件处理函数,维持原本的行为

              //让基类按照常规处理,一定要加上

              return QWidget::eventFilter(watched, event);

       }     

2、绘图

       void Widget::paintEvent(QPaintEvent *event);

       update() --- 手动刷新,界面重绘,触发paintEvent事件,可以配合定时器事件timerEvent一起使用

      

       QPainter: //画家

       QPen: //笔

       QBrush: //刷子

    QPainter p(this);//set this 表示设置主窗口为画布

    QPen pen(QColor(0, 0, 255));

    pen.setWidth(3);

    pen.setStyle(Qt::DashLine);

    p.setPen(pen); //设置画笔

      

    QBrush brush(QColor(255, 0, 0));

    brush.setStyle(Qt::Dense3Pattern);

    p.setBrush(brush); //设置画刷

    p.drawLine(0, 0, 100, 100);//画线

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

    p.drawEllipse(QPoint(300, 300), 100, 50); //画椭圆

    p.drawEllipse(QPoint(450, 300), 100, 100); //画圆

    p.drawPixmap(xPos++*50, 400, QPixmap(":/pic/luffy.png")); //画图片

    p.translate(width()/2, height()/2); //将画家的坐标系的原点移动到主窗口的中心点位置

    p.drawEllipse(QPoint(0, 0), 150, 150);

    p.save(); //保存当前的画家的坐标系

    //画秒针

    p.rotate(6); //将画家的坐标系顺时针旋转6°

    p.drawLine(QPoint(0, 0), QPoint(0, -100));

    p.restore();     //恢复之前保存的画家的坐标系


http://www.ppmy.cn/news/1150125.html

相关文章

UE4和C++ 开发-头文件(.h) 和实现文件(.cpp)区别

.h文件和.cpp文件是C程序中的两种不同类型的文件。 .h文件通常包含类、函数和变量的声明&#xff0c; 而.cpp文件包含这些声明的实现。 .h文件中的声明通常是公共的&#xff0c;可以被其他文件包含和使用。.cpp文件中的实现通常是私有的&#xff0c;只能在该文件中使用。 在…

ARM 10.12

设置按键中断&#xff0c;按键1按下&#xff0c;LED亮&#xff0c;再按一次&#xff0c;灭 按键2按下&#xff0c;蜂鸣器响。再按一次&#xff0c;不响 按键3按下&#xff0c;风扇转&#xff0c;再按一次&#xff0c;风扇停 src/key.c #include"key.h"//按键3的配…

Linux网络编程:UDP协议和TCP协议

目录 一. 对于端口号的理解 1.1 网络通信五元组 1.2 端口号的划分策略 二. 网络通信中常用的指令 2.1 netstat指令 2.2 pidof指令 三. udp协议 3.1 udp的概念及特点 3.2 udp协议端格式 3.3 对于面向数据报及应用层发送与读取数据的理解 四. tcp协议的概念及特点 五.…

C++课程总复习

一、c的第一条程序 1.cout cout >输出类对象&#xff0c;用来输出的&#xff0c;可以自动识别类型&#xff0c;所以不需要加格式符号 << 插入符&#xff08;输出符号&#xff09; endl 换行>\n #include <iostream> //#预处理 //include 包含 相应的头…

两数之和(Java版)

题目描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 …

【大数据】HDFS概述(学习笔记)

一、文件系统、分布式文件系统 1、传统文件系统 文件系统是一种存储和组织数据的方法&#xff0c;实现了数据的存储、分级组织、访问和获取等操作。 文件系统使用树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念。 数据&#xff1a;指存储的内容本身。这些数据…

mybatis拦截器源码分析

mybatis拦截器源码分析 拦截器简介 mybatis Plugins 拦截器由于Mybatis对数据库访问与操作进行了深度的封装,让我们应用开发效率大大提高,但是灵活度很差拦截器的作用:深度定制Mybatis的开发抛出一个需求 :获取Mybatis在开发过程中执行的SQL语句(执行什么操作获取那条SQL语句…

Python还有什么赋值?Python赋值语句的多种形式

Python是一种强大且灵活的编程语言&#xff0c;其赋值语句的多样性是其特色之一。除了常见的变量赋值&#xff0c;Python还支持许多其他赋值方式&#xff0c;包括多重赋值、增量赋值以及解包赋值等。在本文中&#xff0c;我们将深入探讨Python中赋值语句的多种形式&#xff0c;…