Qt5.9学习笔记-事件(四)Qt5.9中常见事件

news2024/9/25 11:16:27

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。
如果觉得本文能帮到您,麻烦点个赞👍呗!

近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️
Qt5.9专栏定期更新Qt的一些项目Demo
项目与比赛专栏定期更新比赛的一些心得面试项目常被问到的知识点。

QT5.9专栏会定期更新有趣的Qt知识

以工程为导向进行Qt5.9的学习,打捞基础。专栏中有Qt5.9学习笔记-仿Everything的的文件搜索的GUI工具,以及相关的基础知识。
在这里插入图片描述

最近在重新梳理一下Qt事件的基础知识,发现了一些有趣的知识点和开发的坑点,做一些笔记。

当涉及到Qt5.9事件时,事件系统是非常重要的一个主题。Qt5.9事件系统是一个强大的工具,它允许开发人员在Qt应用程序中响应和处理各种类型的事件。在本文中,我们将讨论Qt5.9事件系统的基础知识以及如何在应用程序中使用它来处理事件。

5 Qt5.9中的常见事件

  • 定时器事件
  • 鼠标事件
  • 键盘事件
  • 窗口事件

Qt5.9中的三种常见事件:定时器事件、鼠标事件和键盘事件。

5.1 定时器事件

定时器事件是指在指定的时间间隔内周期性地触发事件。在Qt中,我们可以通过继承QTimer类来创建定时器对象。下面是一个简单的例子:

class MyTimer : public QTimer
{
    Q_OBJECT

public:
    MyTimer(QObject *parent = nullptr) : QTimer(parent)
    {
        connect(this, &QTimer::timeout, this, &MyTimer::onTimeout);
        start(1000);
    }

signals:
    void timerSignal();

private slots:
    void onTimeout()
    {
        emit timerSignal();
    }
};

在上面的代码中,我们创建了一个MyTimer类继承自QTimer类,并重写了QTimer类中的timeout()方法,即定时器事件的处理函数。在MyTimer类的构造函数中,我们通过connect()函数将定时器的timeout信号连接到自定义的槽函数onTimeout(),并将定时器的时间间隔设置为1秒。在onTimeout()槽函数中,我们发射了一个自定义的信号timerSignal(),以便在应用程序的其他地方使用。

5.2 鼠标事件

鼠标事件是指当用户在应用程序的窗口中移动鼠标时,会触发相应的事件。在Qt中,我们可以通过重写QWidget类的鼠标事件处理函数来处理鼠标事件。下面是一个简单的例子:

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        setFixedSize(200, 200);
    }

protected:
    void mousePressEvent(QMouseEvent *event) override
    {
        qDebug() << "Mouse Pressed:" << event->pos();
    }

    void mouseMoveEvent(QMouseEvent *event) override
    {
        qDebug() << "Mouse Moved:" << event->pos();
    }

    void mouseReleaseEvent(QMouseEvent *event) override
    {
        qDebug() << "Mouse Released:" << event->pos();
    }
};

在上面的代码中,我们创建了一个MyWidget类继承自QWidget类,并重写了QWidget类中的三个鼠标事件处理函数:mousePressEvent()mouseMoveEvent()mouseReleaseEvent()。在这三个函数中,我们使用qDebug()函数输出鼠标事件的信息,例如鼠标按下、移动和释放的位置。

5.3 键盘事件

键盘事件是指当用户在应用程序的窗口中按下或释放键盘按键时,会触发相应的事件。在Qt中,我们可以通过重写QWidget类的键盘事件处理函数来处理键盘事件。下面是一个简单的例子:

下面是完整的代码实现:

#include <QApplication>
#include <QWidget>
#include <QTimerEvent>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QLabel>

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = nullptr);

protected:
    void timerEvent(QTimerEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void keyPressEvent(QKeyEvent *event) override;

private:
    int m_timerId;
    QLabel *m_label;
};

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent), m_timerId(-1)
{
    m_label = new QLabel(this);
    m_label->setAlignment(Qt::AlignCenter);
    m_label->setText("Press the left mouse button or any key to generate events");
    m_label->setGeometry(10, 10, 280, 80);

    m_timerId = startTimer(1000);
}

void MyWidget::timerEvent(QTimerEvent *event)
{
    if (event->timerId() == m_timerId) {
        m_label->setText(QString("Timer event %1").arg(QDateTime::currentDateTime().toString("hh:mm:ss")));
    } else {
        QWidget::timerEvent(event);
    }
}

void MyWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        m_label->setText("Mouse left button pressed");
    } else {
        QWidget::mousePressEvent(event);
    }
}

void MyWidget::keyPressEvent(QKeyEvent *event)
{
    m_label->setText(QString("Key %1 pressed").arg(event->text()));
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyWidget w;
    w.show();

    return a.exec();
}

这个例子演示了如何在Qt中使用定时器事件、鼠标事件和键盘事件。在窗口中,我们添加了一个QLabel控件来显示事件的信息。当定时器事件发生时,标签的文本将被更新以显示当前时间。当鼠标左键按下时,标签将显示“Mouse left button pressed”。当任何键按下时,标签将显示哪个键被按下。注意,在键盘事件处理函数中,我们使用了QKeyEvent的text()函数来获取按下的键的文本。

最后,最后
如果觉得有用,麻烦三连👍⭐️❤️支持一下呀,希望这篇文章可以帮到你,你的点赞是我持续更新的动力

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

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

相关文章

5月1日 9H45min|5月2日 8H20min+30min|时间轴复盘

8:00 起床 8:00-8:30 洗漱吃饭 8:30-10:40 temporary pools阅读真题精读 (真的很慢了 不知道什么原因 感觉也没有彻底完全弄懂)【2h+10min】 10:40-11:10 午餐+酸奶(423+174KJ) 11:20-12:30 三篇阅读【1h+10min】 13:10-14:50 健身 14:50-15:45诵默写list…

【Stable Diffusion】ControlNet基本教程(四)

本文概要 接上篇【Stable Diffusion】ControlNet基本教程&#xff08;三&#xff09;&#xff0c;本篇再介绍两个ControlNet常见的基本用法&#xff1a;控制人物动作和建筑/室内生成。让人物摆出特定的动作&#xff0c;这是ControlNet最神级的操作&#xff01;这意味着可以自定…

密码学【java】初探究之springboo集成mybatis,swagger,数字签名

文章目录 项目环境一 swagger技术的补充1.1 [swagger](&#xff08;https://github.com/OAI/OpenAPI-Specification&#xff09;)介绍1.2 swagger的基础注解1.3 controller添加swagger注解 二 项目搭建2.1 创建数据库2.2 引入项目依赖2.3 配置数据库的连接2.4 配置swagger的配置…

USB 字节序,编码格式及位填充

字节序 LSB 发送一个字节时&#xff0c;先发送低位数据&#xff0c;再发送高位数据发送一个字时&#xff0c;先发送低字节数据&#xff0c;再发送高字节数据 例如&#xff1a; 发送 0x2D&#xff0c;发送的顺序为&#xff1a;10110100(低位在前&#xff0c;高位在后)发送 0…

项目前置准备

目录 项目前置准备 总体架构 CVPR2022是什么 一个项目架构图要如何进行看和学习呢&#xff1f;内容有点多有些摸不着头脑 我该如何理解架构图中的组件 Jenkins是什么&#xff1f; Docker是什么&#xff1f; FastDFS是什么&#xff1f; 项目前置准备 总体架构 CVPR2022是什…

golang grpc配置使用实战教程

什么是PRC&GRPC RPC是远程过程调用&#xff08;Remote Procedure Call&#xff09;的缩写形式, RPC 的主要功能目标是让构建分布式计算&#xff08;应用&#xff09;更容易&#xff0c;在提供强大的远程调用能力时不损失本地调用的语义简洁性。通俗地讲&#xff0c;使用RP…

软考 软件设计师 数据结构

大O表示法 常数阶&#xff0c;他的次数不会随着n的变大而变长 抓大头 取次方最大的 时间复杂度 没有循环 没有递归没有跟n相关的东西&#xff0c;那么他的复杂度就是o&#xff08;1&#xff09; 为什么ii*2那里会加1阿&#xff1f; 因为需要加一次才能跳出循环1 2 4 8 中间加…

有趣的回文检测

英文中有很多的回文词&#xff0c;回文词的拼法十分有趣&#xff0c;无论是从前往后拼读&#xff0c;还是从后往前拼读&#xff0c;他们的拼法和词义都不变。例如&#xff1a;dad&#xff08;爸爸&#xff09;&#xff0c;mum&#xff08;妈妈&#xff09;&#xff0c;noon&…

flac格式怎么转换mp3格式?

flac格式怎么转换mp3格式&#xff1f;什么是flac格式呢&#xff1f;通常来说&#xff0c;flac是一种无损音频压缩编码。flac格式主要特点就是无损压缩。对于flac格式而言&#xff0c;与其他有损压缩编码不同&#xff0c;比如与aac、mp3等相较而言&#xff0c;flac对原有的音频信…

PySide6/PyQT多线程之 生命周期:从创建到销毁的完整解析

前言 在PySide6/PyQT 中使用多线程时&#xff0c;多线程生命周期是一个重要的概念。如果不能正确地管理多线程生命周期&#xff0c;可能会导致程序崩溃、内存泄漏等问题。 在前面的文章中有介绍到 PySide6/PyQT 可以实现多线程的多个类&#xff0c; 有 QObject、QThread、QRun…

【C++刷题笔记】继承和多态常见面试题汇总

对C继承和多态方面的部分面试题进行了汇总 一、概念考察 1. 下面哪种面向对象的方法可以让你变得富有( ) A: 继承 B: 封装 C: 多态 D: 抽象 2. ( )是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关&#xff0c;而对方法的调用则可以关联于具体…

双目测距--4 双目立体匹配 获取深度图

在这之前需要已经完成双目标定&#xff0c;这里是利用双目标定结果利用SGBM算法获取深度图&#xff0c;以及转伪彩图。 目录 StereoSGBM用到的参数&#xff1a; 一、 预处理参数 二 、代价参数 三 、动态规划参数 四、后处理参数 reprojectImageTo3D函数 获取真实距离 …

ChatGPT - 快速生成 流程图

文章目录 Prompt输出Copy 到 drawio Prompt 我想做一个研发标准化的流程,但是我是一个小白,不懂研发管理的流 程,我希望你作为一个经验丰富的技术管理人员,请帮我梳理一个完整流程,包括需求分析、概要设计,代码走查等等,输出的节点不少于18个,包含逻辑判断的分支,要通循实事求…

【SpringCloud微服务实践】服务注册与发现

注册与发现 在之前的示例中&#xff0c;采取的是硬编码的方式&#xff0c;需要调用的微服务的地址是被我们写死在文件或代码中的。在传统应用程序中&#xff0c;一般都是这么做的&#xff0c;然而这种方式存在不少缺陷&#xff1a; 静态配置&#xff1a;因为是写死的网络地址…

力扣sql中等篇练习(十五)

力扣sql中等篇练习(十五) 1 页面推荐 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # ①找到1所对应的朋友 ②找到其朋友喜欢的页面 ③删选掉自己喜欢的页面 # 可能朋友中存在喜欢同样的界面 SELECT distinct page_id reco…

Java每日一练(20230507) 组合总和、缺失的正数、单词搜索II

目录 1. 组合总和 &#x1f31f;&#x1f31f; 2. 缺失的第一个正数 &#x1f31f;&#x1f31f;&#x1f31f; 3. 单词搜索 II &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/…

数字化转型导师坚鹏:企业干部如何进行数字化转型

企业干部如何进行数字化转型 ——数字化转型背景下重塑企业干部核心竞争力 授课背景&#xff1a; 很多银行存在以下问题&#xff1a; 企业干部不知道如何进行数字化转型&#xff1f; 企业干部不清楚银行数字化能力模型的内涵&#xff1f; 企业干部不知道如何通过数字化…

总结843

学习目标&#xff1a; 5月&#xff08;张宇强化18讲&#xff0c;背诵25篇短文&#xff0c;熟词僻义300词基础词&#xff09; 每日必复习&#xff08;5分钟&#xff09; 做记录本上3道题 学习内容&#xff1a; 暴力英语&#xff1a;回环诵读&#xff0c;继续背一篇阅读理解&…

前端实战项目:网易云静态页面——轮播图

前言 目前这个前端项目持续更新中~ 网易云静态页面——导航栏 Flex布局 文章目录 前言实现目标静态实现页面大致样子添加模糊的背景图添加图片下载客户端部分轮播图小圆点第一个小圆点变成红色以及当鼠标放上其他任一小圆点也变成红色左右按钮总代码 动态实现 实现目标 建立相…

Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

Altera_Shift Register&#xff08;RAM-based&#xff09;ip核 前言1.创建mif文件&#xff0c;通过ROM ip核调用该mif文件1.1创建mif文件1.2顺序填充mif文件1.3创建ROM ip核调用mif文件 2.计数器读取mif文件中的数据2.1写一个0-15的循环计数器2.2实例化ROM ip核、调用计数器模块…