日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt 中事件与处理

發布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的Qt 中事件与处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。