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項是跨平臺使用的。
?
轉載于:https://www.cnblogs.com/xiwen2017/p/9634769.html
總結
- 上一篇: 修改表字段属性_使用postman修改S
- 下一篇: 存储过程和函数的操作