首页 > 其他分享 >Qt 中事件与处理

Qt 中事件与处理

时间:2023-06-05 17:08:20浏览次数:32  
标签:Qt 处理 void QMouseEvent 按下 线程 事件

一、事件与处理
程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...
这些的事件的监控与处理在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,处理,void,QMouseEvent,按下,线程,事件
From: https://blog.51cto.com/u_4018548/6417828

相关文章

  • 防冻液(冷却液)处理服务行业市场调研分析与未来发展前景报告2023-2029
    2023-2029全球防冻液(冷却液)处理服务行业调研及趋势分析报告2022年全球防冻液(冷却液)处理服务市场规模约亿元,2018-2022年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2029年市场规模将接近亿元,未来六年CAGR为%。从核心市场看,中国防冻液(冷却液)处理服务市场占据全球......
  • Qt里怎么恢复一个被最小化的窗口
    这个需求出现在窗口最小化之后又被再次运行的时候。很多用户往往不去注意窗口是否已经存在,而是经常直接再次执行打开窗口操作。为了拦截这种情况,通常我们会去检测到窗口是否已经存在,如果存在则把它恢复正常,而不是再新创建一个。这个操作是通过ShowNormal()实现的,但这个函数在wi......
  • 全局事件总线
       ......
  • 解绑自定义事件
    子组件中:  子组件:1)解绑一个自定义事件: 2)解绑多个自定义事件: 3)解绑所有的自定义事件: 销毁钩子也能解绑自定义事件: ......
  • 在elementUI-admin中使用printjs进行打印功能的处理
    1.需要加入依赖npminstallprint-js--save-dev2.通过数据的处理打印表格(推荐)在utils文件夹下创建print.js文件importprintJSfrom"print-js";/** * *@param{ *   title:"",//表名 *   serial:false,//是否需要序号 *   data:[],//......
  • BOSHIDA电源模块 电磁噪声的处理 测量EMI
    BOSHIDA电源模块电磁噪声的处理测量EMI测量EMI的第一个问题是,要寻找的信号是在一个很宽的频率范围内出现的具有特定频率的不确定扰动(信号)。用于此测量的仪器通常是一个频谱分析仪,它能够用窄窗口扫描一个频带。图9.1显示了该器件的简化功能框图。频谱分析仪有很多种功能,但这超出......
  • Laravel-Excel 导出csv文件 中文乱码处理
    Laravel-Excel导出csv文件中文乱码处理标签(空格分隔):未分类文档地址【https://docs.laravel-excel.com/3.1/exports/settings.html】实现WithCustomCsvSettings接口,或者增加配置文件`excel.php`namespaceApp\Exports;useMaatwebsite\Excel\Concerns\WithCustomCsvSet......
  • 网络丢包怎样处理?
    网络丢包是我们在使用ping对目站进行询问时,数据包由于各种原因在信道中丢失的现象。丢包率高的原因有很多,需要根据丢包率高的具体原因具体分析,丢包率高的解决措施如下:物理线路故障:如果是物理线路故障所造成网络丢包现象,则说明故障是由线路供应商提供的线路引起的,需要与线路供应......
  • 事件绑定-事件修饰符
    事件修饰符在事件处理函数中调用event.preventDefault()或event.stopPropagation()是非常常见的需求。因此,vue提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制。常用的5个事件修饰符如下:事件修饰符说明.prevent阻止默认行为(例如:阻止a连接的跳转、阻......
  • 事件绑定-v-on指令的简写模式
    <!DOCTYPEhtml><htmllange="en"> <head> <metacharset="utf-8"> <title></title> </head> <body> <!--希望Vue能够控制下面的这个div,帮我们在把这个数据填充到div内部--> <divid="app"......