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