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項是跨平台使用的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM