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

news/2024/11/24 9:15:05/

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

近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️
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_OBJECTpublic: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_OBJECTpublic: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.ppmy.cn/news/63618.html

相关文章

聚焦丨酷雷曼荣列XRMA联盟成员单位

自“元宇宙”概念兴起之初&#xff0c;酷雷曼VR所属北京同创蓝天云科技有限公司就积极布局、探索和实践。2022年12月&#xff0c;酷雷曼VR成功加入虚拟现实与元宇宙产业联盟&#xff08;XRMA&#xff09;&#xff0c;正式被接纳为联盟成员单位&#xff0c;意味着酷雷曼公司将进…

Stream

1、Stream为什么被引入 常见MQ(消息中间件)&#xff1a; ActiveMQRabbitMQRocketMQKafka 有没有一种新的技术诞生&#xff0c;让我们不再关注具体MQ的细节&#xff0c;我们只需要用一种适配绑定的方式&#xff0c;自动的给我们在各种MQ内切换。&#xff08;类似于Hibernate&a…

第一行代码 第八章 运用手机多媒体

第八章 运用手机多媒体 使用通知 通知&#xff08;Notification&#xff09;是Android系统中比较有特色的一个功能&#xff0c;当某个应用程序希望向用户发出一些提示信息&#xff0c;而该应用程序又不在前台运行时&#xff0c;就可以借助通知来实现。发出一条通知后&#xf…

全面理清概念,C风格字符串(多重定义方式,区别,易错点)

C风格字符串 C风格字符串是一种在C语言中表示字符串的方式&#xff0c;它是通过字符数组来实现的。 C风格字符串是一系列字符&#xff0c;以空字符&#xff08;‘\0’&#xff09;作为结束标志。这意味着在声明并定义一个C风格字符串时&#xff0c;我们需要为数组分配比实际字符…

C高级第二天

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,const char *argv[]) { int n 0, m 0, MAX 0; int arr[n][m]; printf("请输入矩阵行数、列数>>>"); scanf("%d%d", &n…

C++网络基础知识面试题2

目录 1、使用TCP的常见协议有哪些&#xff1f;使用UDP的常见协议有哪些&#xff1f;简单说几个 2、如何判断访问目标地址的网络是通的&#xff1f;如何简单地查看到目标地址的网络是否有丢包和抖动&#xff1f; 3、如果知道目标服务器的服务端口有没有开启&#xff1f; 4、…

unity愤怒的小鸟学习制作(一)

基础知识已经差不多了&#xff0c;现在开始模仿敲代码然后在模仿中熟悉软件和语法 视频链接和素材如下&#xff1a;视频 目录 第一部分&#xff1a;游戏逻辑1、新建2D工程2、创建三个场景3、导入游戏需要的资源4、开始编辑02-game4.1 裁切图片4.2 初步编辑4.3 实现小鸟的拖拽4…

java 代码如何实现简易的 MVC 框架

MVC&#xff08;Model-View-Controller&#xff09;是一种常用的设计模式&#xff0c;用于构建大型的Web应用程序。MVC将应用程序分为三个部分&#xff1a; 模型&#xff08;Model&#xff09;&#xff1a;负责数据的存储和管理&#xff0c;通常包括数据库访问、数据验证、业务…