2.23号qt

4.3 颜色对话框 QColorDialog

该类给用户提供了一个颜色对话框,直接调用该类的一个静态成员函数getColor()即可直接弹出颜色对话框。

[static] QColor //返回值类型  返回的是用户选中的颜色  静态函数
    QColorDialog::getColor(//函数名
        const QColor &initial = Qt::white, //初始颜色
        QWidget *parent = nullptr, //指定父对象
        const QString &title = QString(), //对话框标题
        )

通过isValid()判断用户是否选中颜色 如果选中颜色返回true,否则false
bool QColor::isValid() const

4.4 文件对话框 QFileDialog

该类给用户提供了一个文件对话框,可以获取文件路径,可以直接调用该类里的两个静态成员函数弹出文件对话框,分别是getOpenFileName()、getSaveFileName()。

[static] QString //函数返回值类  返回的是文件所在的路径 静态函数
    QFileDialog::getOpenFileName( //函数名
        QWidget *parent = nullptr, //指定父组件
        const QString &caption = QString(),//对话框的标题 
        const QString &dir = QString(), //起始路径
        const QString &filter = QString(), //过滤器
        QString *selectedFilter = nullptr, //选中的过滤器
        )

[static] QString 
    QFileDialog::getSaveFileName(
        QWidget *parent = nullptr, 
        const QString &caption = QString(), 
        const QString &dir = QString(), 
        const QString &filter = QString(), 
        QString *selectedFilter = nullptr, 
        QFileDialog::Options options = Options())

1.事件机制

1.1概念

当这件事情发生时,自动执行某块功能代码,该某块功能代码都是系统提供的虚函数,我们只需要将该虚函数重写即可。

1.2事件处理简介

1. 什么是事件? (重点)

事件是由窗口系统或者自身产生的,用以响应所发生的 各类事情,比如用户按下并释放了键盘或者鼠标、窗口因 暴露而需要重绘、定时器到时而应有所动作,等等 从某种意义上讲,事件比信号更原始,甚至可以认为大多 数信号其实都是由事件产生的。比如一个下压式按钮首先 感受到的是鼠标事件, 在进行必要的处理以产生按钮下沉 继而弹起的视觉效果之后,才会发射 clicked()信号

2. 如何处理事件? (重点)

1> 当事件发生时,首先被调用的是QObject类中的虚函数event(), 其 QEvent型参数标识了具体的事件类型

 2> 作为QObject类的子类, QWidget类覆盖了其基类中的
   event()虚函数,并根据具体事件调用具体事件处理函数
       void QWidget::mousePressEvent (QMouseEvent* e)
       void QWidget::mouseReleaseEvent (QMouseEvent* e)
       void QWidget::keyPressEvent (QMouseEvent* e)
       void QWidget:: keyReleaseEvent (QMouseEvent* e)
       void QWidget::paintEvent (QPaintEvent* e)

3> 而这些事件处理函数同样也是虚函数,也可以被 QWidget类 的子类覆盖,以提供针对不同窗口部件类型的事件处理

1.3 事件处理函数由来

2.定时器事件 QTimerEvent

qt的定时器事件提供了两种实现版本,分别是基于属性版本、基于事件函数版本。

2.1 基于事件函数

功能: 让系统每隔一定的时间,自动执行某块功能代码 (函数)

void Widget::timerEvent(QTimerEvent *e)
{
    static int num = 0;
    ui->Lab1->setNum(++num);


}

void Widget::on_Btn1_clicked()

{

        id = startTimer(1000); //让系统每隔1秒钟,自动执行timerEvent()函数

}

3.键盘事件 QKeyEvent

3.1 功能

当程序员使用键盘时(按下、抬起)时,自动执行某块功能代码。

3.2 重写的函数

[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event); //键盘按下的虚函数
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event);//键盘抬起的虚函数

3.3 QKeyEvent常用的函数

key() ----->键盘上对应的键值

text() ------>键盘上对应的文本(eg:有大小写字母)

4.鼠标事件 QMouseEvent

4.1 功能

当程序员使用鼠标时,自动执行某块功能代码。

4.2 重写函数的种类

[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event);//鼠标双击事件函数的声明
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event);//鼠标移动事件函数的声明
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event);//鼠标按下事件函数的声明
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event);//鼠标抬起事件函数的声明

4.3 QMouseEvent常用的函数

Qt::MouseButton 
button() const ---->判断鼠标哪个键被按下

Qt::MouseButtons 
buttons() const ---->对于鼠标移动是,判断鼠标哪个键被按下

x()  --->x轴坐标
y()  --->y轴坐标

pos()  --->在当前窗口的坐标点

globapos()  ---->在全局窗口的坐标点  

作业

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#include <QTimerEvent>
#include <QTime>#include <QTextToSpeech>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void timerEvent(QTimerEvent *e);private slots:void on_btn1_clicked();private:Ui::Widget *ui;int id;};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);id=startTimer(1000);}Widget::~Widget()
{delete ui;
}void Widget::timerEvent(QTimerEvent *e)
{QTime sys_time=QTime::currentTime();QString t=sys_time.toString("hh-mm-ss");ui->lab1->setText(t);QString time=ui->ed->text();QTextToSpeech *s=new QTextToSpeech(this);if(time==t){for(int i=0;i<3;i++){s->say(ui->lab3->text());}}}void Widget::on_btn1_clicked()
{if(ui->btn1->text()=="启动"){ui->btn1->setText("关闭");}else if(ui->btn1->text()=="关闭"){killTimer(id);ui->btn1->setText("启动");}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python Matplotlib Tkinter--pack 框架案例

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 版本一 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox…

优思学院|精益生产管理在中国的发展前景

在这个快速变化的世界里&#xff0c;有一个管理理念悄然崛起&#xff0c;它就是精益生产。 这个概念最早由詹姆斯P沃麦克、丹尼尔T琼斯和丹尼尔鲁斯在他们的著作《改变世界的机器》中提出&#xff0c;后来在丰田汽车公司的成功实践中得到了广泛的认可。 这本书不仅风靡全球&a…

Springboot中如何记录好日志

Springboot中如何记录日志 日志体系整体介绍 日志一直在系统中占据这十分重要的地位&#xff0c;他是我们在系统发生故障时用来排查问题的利器&#xff0c;也是我们做操作审计的重要依据。那么如何记录好日志呢&#xff1f;选择什么框架来记录日志&#xff0c;是不是日志打越…

Selenium 自动化遇见 shadow-root 元素怎么处理?

shadow-root是前端的特殊元素节点&#xff0c;其使用了一个叫做shadowDOM的技术做了封装&#xff0c;shadowDOM的作用可以理解为在默认的DOM结构中又嵌套了一个DOM结构&#xff08;和iframe有点类似&#xff0c;只不过iframe内嵌的是HTML&#xff09;&#xff0c;我们遇见shado…

MIPS汇编入门

MIPS汇编入门 寄存器种类指令种类寻址方式立即数寻址寄存器寻址基址寻址相对寻址伪直接寻址 指令总览 寄存器种类 MIPS共有32个通用寄存器在汇编中&#xff0c;寄存器标志由$符号开头寄存器表示共有两种方法 直接使用该寄存器对应编号&#xff0c;例如&#xff1a;$0,$31使用对…

管理心得--如何成为优秀的架构师

关注我&#xff0c;持续分享逻辑思维&管理思维&#xff1b; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导&#xff1b; 有意找工作的同学&#xff0c;请参考博主的原创&#xff1a;《面试官心得--面试前应该如何准备》&#xff0c;《面试官心得--面试时如何进行自…

LMDeploy 大模型量化部署

Weight Only量化是一种常见的模型优化技术&#xff0c;特别是在深度学习模型的部署中。这种技术仅对模型的权重进行量化&#xff0c;而不涉及激活&#xff08;即模型中间层的输出&#xff09;。选择采用Weight Only量化的原因主要包括以下几点&#xff1a; 减少模型大小 通过将…

VirtualBox虚拟机安装 Linux 系统

要想学习各种计算机技术&#xff0c;自然离不开Linux系统。并且目前大多数生产系统都是安装在Linux系统上。常用的Linux系统有 Redhat&#xff0c;Centos&#xff0c;OracleLinux 三种。 三者的区别简单说明如下&#xff1a; Red Hat Enterprise Linux (RHEL): RHEL 是由美国…

ICASSP2024 | MLCA-AVSR: 基于多层交叉注意力机制的视听语音识别

视听语音识别&#xff08;Audio-visual speech recognition, AVSR&#xff09;是指结合音频和视频信息对语音进行识别的技术。当前&#xff0c;语音识别&#xff08;ASR&#xff09;系统在准确性在某些场景下已经达到与人类相媲美的水平。然而在复杂声学环境或远场拾音场景&…

Qt应用软件【文件篇】XML文件增删查改

文章目录 1. XML文件简介2. XML文件的主要特点3. XML文件的应用场景4. Qt XML文件相关API汇总5. Qt读取XML文件代码示例6. Qt写入XML文件代码示例7. Qt修改XML文件代码示例8. 字符串转换为XML对象9. XML对象转换为字符串10.替换复杂的xml文件中属性,保持格式不变1. XML文件简介…

大语言模型推理加速技术:计算加速篇

原文&#xff1a;大语言模型推理加速技术&#xff1a;计算加速篇 - 知乎 目录 简介 Transformer和Attention 瓶颈 优化目标 计算加速 计算侧优化 KVCache Kernel优化和算子融合 分布式推理 内存IO优化 Flash Attention Flash Decoding Continuous Batching Page…

Go Run - Go 语言中的简洁指令

原文&#xff1a;breadchris - 2024.02.21 也许听起来有些傻&#xff0c;但go run是我最喜欢的 Go 语言特性。想要运行你的代码&#xff1f;只需go run main.go。它是如此简单&#xff0c;我可以告诉母亲这个命令&#xff0c;她会立即理解。就像 Go 语言的大部分功能一样&…

微调实操四:直接偏好优化方法-DPO

在《微调实操三:人类反馈对语言模型进行强化学习(RLHF)》中提到过第三阶段有2个方法,一种是是RLHF, 另外一种就是今天的DPO方法, DPO通过直接优化语言模型来实现对其行为的精确控制&#xff0c;而无需使用复杂的强化学习&#xff0c;也可以有效学习到人类偏好&#xff0c;DPO相…

python中的类与对象(2)

目录 一. 类的基本语法 二. 类属性的应用场景 三. 类与类之间的依赖关系 &#xff08;1&#xff09;依赖关系 &#xff08;2&#xff09;关联关系 &#xff08;3&#xff09;组合关系 四. 类的继承 一. 类的基本语法 先看一段最简单的代码&#xff1a; class Dog():d_…

java常见面试题1

面试题 简单但容易错的题 1.自增、自减 简单题目 // 部分代码&#xff0c;非可运行 int i 1; i i; int j i; int k i i * i; //i? j? k? 这个题看着简单又凌乱的&#xff0c;重要的考点主要是以下几点&#xff1a; “” 右边是从左到右将加载值依次压入操作数栈&…

智慧公厕的目的和意义是什么?

智慧公厕是近年来城市建设中的一项重要举措&#xff0c;其目的在于实现公共厕所的智慧化管理&#xff0c;为市民群众提供更好的服务体验&#xff0c;助力智慧城市和数字环卫的发展&#xff0c;提升社会公共卫生服务水平。 与此同时&#xff0c;智能公厕也具有重要的意义&#x…

C 语言简介

C 语言是一种通用的高级语言&#xff0c;最初是由丹尼斯里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。 在 1978 年&#xff0c;布莱恩柯林汉&#xff08;Brian Kernighan&#xff09;和丹尼斯里奇&#xff08;D…

springboot+vue实现微信公众号扫码登录

通常在个人网站中&#xff0c;都会有各种第三方登录&#xff0c;其中微信登录需要认证才能使用&#xff0c;导致个人开发者不能进行使用此功能&#xff0c;但是我们可以使用微信公众号回复特定验证码来进行登录操作。 微信关键词处理 微信公众号关键词自动回复&#xff0c;具体…

60kW 可编程直流回馈负载箱的优势和特点

60kW可编程直流回馈负载箱是一种先进的电力设备&#xff0c;主要用于模拟电网中的负载&#xff0c;为电力系统提供稳定的负载环境。它具有许多优势和特点&#xff0c;使其在电力系统中得到了广泛的应用。 60kW可编程直流回馈负载箱具有高效的能源转换效率&#xff0c;能够将电能…

Object.groupBy分组方法

在某些浏览器的某些版本中&#xff0c;此方法被实现为 Array.prototype.group() 方法。由于 web 兼容性问题&#xff0c;它现在以静态方法实现。 函数功能 提供的回调函数返回的字符串值对给定可迭代对象中的元素进行分组。返回的对象具有每个组的单独属性&#xff0c;其中包…