Qt 中事件与处理
一、事件与处理
程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...
这些的事件的监控与处理在Qt中不是以信号的方式处理的。
当这些事件发生时会调用QObject类中的功能函数(虚函数),所有的控件类都继承了这个类。
常用的鼠标事件:
void mousePressEvent(QMouseEvent *); 按下
void mouseReleaseEvent(QMouseEvent *); 弹起
void mouseMoveEvent(QMouseEvent *); 按下时并移动
void mouseDoubleClickEvent(QMouseEvent *); 双击(会触发按下和弹起);
通过QMouseEvent 可以判断出是个按键:
event->button() == Qt::LeftButton
event->button() == Qt::RightButton
event->button() == Qt::MidButton
常用的键盘事件:
void keyPressEvent(QKeyEvent *); 按下
void keyReleaseEvent(QKeyEvent *); 弹起
通过QKeyEvent 可以判断出按键的键值:
event->key == Qt::Key_Up;
常用的窗口事件:
void closeEvent(QCloseEvent *); 窗口关闭
void paintEvent(QPaintEvent *); 窗口显示
void moveEvent(QMoveEvent *); 窗口移动
二、线程与多线程
1、在Qt中什么情况下需要多线程?
在单线程时,如果在耗时较长的操作,那么主界面会被阻塞。
会产生卡死的现象。
2、Qthread类
a、必须要继承
b、必须要重写run函数
3、等待线程
QThread::wait(time);
功能:等待线程结束并回收,与pthread_join一样。
time:设置要等待的秒数,如果时间到了线程还没有结束则等待失败,默认值是ULONG_MAX(一直等下去)。
4、终止线程
QThread::terminate(),让线程结束执行。
terminated(),线程结束信号。
练习:如何用信号槽,在子线程里发送信号给主线程,让主线程显示图片(修改GUI主界面)。
1、在创建类时立即添加 Q_OBJECT
2、如果编译后末添加,把所有Qt自动生成的文件删除
3、使用qmake -project、qmake、make
三、线程同步
QMutex 互斥量
QReadWriteLock 读写锁
QSemaphore 信号量
QWaitCondition 条件变量
功能与Linux系统中的一样,但这4项是跨平台使用的。
Qt 中事件与处理的更多相关文章
- Qt中事件分发源代码剖析(一共8个步骤,顺序非常清楚:全局的事件过滤器,再传递给目标对象的事件过滤器,最终传递给目标对象)
Qt中事件分发源代码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,并且进行分发,这些都是在exec中进行的.下面举例说明: 1)首先看看下面一段示例代码: in ...
- Qt中事件分发源代码剖析
Qt中事件分发源代码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,并且进行分发,这些都是在exec中进行的. 下面举例说明: 1)首先看看下面一段示例代码: i ...
- Qt中事件分发源码剖析
Qt中事件分发源码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,而且进行分发,这些都是在exec中进行的. 以下举例说明: 1)首先看看以下一段演示样例代码: ...
- QT中事件处理器和事件过滤器实现实例
Qt中事件处理的方式,最常用的就是使用事件处理器(event handler)和事件过滤器(event filter)这两种方法.接下来,我们就来看看事件处理器和事件过滤器是怎么使用的. 事件处理器 ...
- 第39课 Qt中的事件处理(下)
1. 事件的传递过程 (1)操作系统检测到用户动作时,会产生一条系统消息,该消息被发送到Qt应用程序 (2)Qt应用程序收到系统消息后,将其转化为一个对应的QEvent事件对象,并调用QObject: ...
- Qt 中的事件处理(二)
1. 回顾事件传递的过程 ①源头:操作系统 操作系统检测到用户的动作时,就会产生一个系统消息,系统消息就会被发送到正在运行的Qt应用程序中, ②应用程序收到系统消息后, 他会将系统消息翻译成对应的 ...
- Qt 中的事件处理(一)
1.图形界面应用程序的消息处理模型 特点: 基于操作系统才能运行 GUI应用程序提供的功能必须由用户触发 用户操作界面时操作系统是第一个感知的 系统内核的消息通过事件处理转变成QT的信号 2. Qt中 ...
- Qt中的事件
1. 引自---http://blog.sina.com.cn/s/blog_6e80f1390100pro4.html 信号和事件的区别就在与,事件比信号更加底层,而且如果一个信号对应多个槽的话,信 ...
- Qt中的键盘事件,以及焦点的设置(比较详细)
Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口 ...
随机推荐
- python 动态指定header获取网页源代码的函数
import random import requests def get_htmla(url): aui=0 while aui==0: try: header={'User-Agent':'Moz ...
- Unittest方法 -- 测试分离
一.下面是it.py 脚本,把浏览器前置和后置条件分离了"""套件公用测试类可进行分离"""import unittestfrom sele ...
- Deepin 20.2.2 /UOS 20.2 添加ppa源
由于 工作需要,需要通过PPA安装一些优质的软件包,但是 Deepin 默认不支持PPA源 解决方法 由于Deepin/Uos系统默认是没有安装PPA的那么我们得先安装PPA来支持"add- ...
- OpenSUSE Leap 42.1 KDE Ultmate Linux Distribution终极Linux系统试用与SSH连接
系统安装环境: #一台旧笔记本电脑 #CPU Intel(R) Core(TM) i3 M 380 2.53GHz (4核) #内存 1G #硬盘存储 250G #系统型号 OpenSUSE Leap ...
- 如何写好技术文档——来自Google十多年的文档经验
本文大部分内容翻译总结自<Software Engineering at Google> 第10章节 Documentation. 另外,该书电子版近日已经可以免费下载了 https:// ...
- video标签的视频全屏
按钮: <div class="fullScreen" @click="fullScreen"><i class="el-icon- ...
- 解决跨网段intouch嵌入视频问题
在自控项目中,一般会将视频网络和自控网络分开,分属于两个不同的逻辑网段,以避免局域网ip不够用的问题.这就造成了一个问题,如何实现在自控网络上位机访问摄像头并嵌入使用?这里其实很简单,因为这两个网络本 ...
- atom之插件安装及相关
1. simplified-chinese-menu 汉化软件 2. file-icons 加上文件图标 3. language-vue 加上vue语言支持 4. platformio-ide-ter ...
- SpringBoot自动装配-Import
1. 简介 @Import导入的类会被Spring加载到IOC容器中.而@Import提供4中用法: 导入Bean 导入配置类 导入 ImportSelector 实现类.一般用于加载配置文件中的类 ...
- Elasticsearch(9300、9200)未授权访问
下载地址https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip 检测 http://localhost ...