一、事件与处理
程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...
这些的事件的监控与处理在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项是跨平台使用的。

最新文章

  1. 聊聊 Apache 开源协议
  2. Java初学(四)
  3. DButil
  4. jmeter 构建一个LDAP测试计划
  5. 使用JAVA对字符串进行DES加密解密(修正问题)
  6. Android学习系列(22)--App主界面比较
  7. 自己的包poi操作Excel工具
  8. SharePoint 2013 如何使用Silverlight
  9. 【Python3之模块及包的导入】
  10. JXLS 2.4.0系列教程(一)——最简单的模板导出
  11. python @property的用法及含义全面解析
  12. 设置Oracle数据库开机自启动-亲试ok
  13. 栈(stack)信息
  14. MUSIC分辨率与克拉美罗下界的关系
  15. Dev-cpp怎样去掉括号匹配?
  16. nginx 代理跨域
  17. fuzz for test of the Net::HTTP::GET
  18. 配置Eclipse编写HTML/JS/CSS/JSP页面的自动提示
  19. 关于 Git SSH 使用的项目实践
  20. 分布式系列 - dubbo服务发布

热门文章

  1. java并发编程基础——线程通信
  2. NOIp 2020
  3. 自建CA实现HTTPS
  4. 03_Nginx支持SSL
  5. 第三十二篇 -- CreateFile、ReadFile、WriteFile
  6. 第二十四篇 -- Cache学习
  7. MySQL是怎么解决幻读问题的?
  8. 1.4matlab矩阵的表示
  9. 研究java ResultSet结果集
  10. djinn靶机