网站首页 > 博客文章 正文
导语
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。对于初学者,总会对Qt中信号和事件的概念混淆不清。其实,记住事件比信号更底层就可以了。比如说,我们用鼠标按下界面上的一个按钮,它会发射clicked()单击信号,但是,它怎么知道自己被按下的呢,那就是通过鼠标事件处理的。这里可以看到,鼠标事件比信号更底层。
在Qt中处理事件有多种方法,不过最常用的是重写Qt事件处理函数。这里我们就以鼠标事件和键盘事件为例来进行简单的介绍。
环境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1
目录
- 一、鼠标事件
- 二、键盘事件
正文
一、鼠标事件
1.新建Qt Gui应用,项目名称为myEvent,基类更改为QWidget,类名为Widget。
2.完成项目创建后,在设计模式向界面上拖入一个Push Button。
3.在widget.h文件添加鼠标按下事件处理函数声明:
protected:
void mousePressEvent(QMouseEvent *);
4.到widget.cpp文件中先添加头文件包含:
#include <QMouseEvent>
然后在下面添加函数的定义:
void Widget::mousePressEvent(QMouseEvent *e)
{
ui->pushButton->setText(tr("(%1,%2)").arg(e->x()).arg(e->y()));
}
这里的arg()里的参数分别用来填充%1和%2处的内容,arg()是QString类中的一个静态函数,使用它就可以在字符串中使用变量了。其中x()和y()分别用来返回鼠标光标所在位置的x和y坐标值。这样,当鼠标在界面上点击时,按钮就会显示出当前鼠标的坐标值。效果如下图所示。
除了鼠标按下事件,还有鼠标释放、双击、移动、滚轮等事件,其处理方式与这个例子是相似的。
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击→领取「链接」
二、键盘事件
1.首先在widget.h中添加protected函数声明:
void keyPressEvent(QKeyEvent *);
2.然后到widget.cpp中添加头文件包含:
#include <QKeyEvent>
3.最后添加键盘按下事件处理函数的定义:
void Widget::keyPressEvent(QKeyEvent *e)
{
int x = ui->pushButton->x();
int y = ui->pushButton->y();
switch (e->key())
{
case Qt::Key_W : ui->pushButton->move(x, y-10); break;
case Qt::Key_S : ui->pushButton->move(x, y+10); break;
case Qt::Key_A : ui->pushButton->move(x-10, y); break;
case Qt::Key_D : ui->pushButton->move(x+10, y); break;
}
}
这里我们先获取了按钮的位置,然后使用key()函数获取按下的按键,如果是指定的W、S、A、D等按键时则移动按钮。所有的按键都在Qt::Key枚举变量中进行了定义,大家可以在帮助文档中进行查看。
结语
除了键盘按下事件,常用的还有键盘释放事件,这里就不再举例。如果想了解更多事件方面的知识,可以参考《Qt Creator快速入门》一书的第6章的内容。
猜你喜欢
- 2024-09-29 Qt的6个简单小案例(qt官方例子)
- 2024-09-29 Qt入门阶段之事件(qt入门阶段之事件是什么)
- 2024-09-29 Qt编写安防视频监控系统9-自动隐藏光标
- 2024-09-29 Qt为什么站稳c++GUI的top1(qt quuid)
- 2024-09-29 Qt5 事件(event)机制详解(qt事件是通过什么实现的)
- 2024-09-29 Qt 保持GUI响应的几种方法(qt保存快捷键)
- 2024-09-29 Qt如何模拟鼠标点击?(qt 模拟鼠标点击)
- 2024-09-29 Qt事件的接受与忽略(qt菜单栏按钮点击事件)
- 2024-09-29 「VTK」「DICOM」修改后的VTK sample code
- 2024-09-29 Qt事件(qt事件与信号槽)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)