qt系統--事件

文章目錄

  • qt系統
    • 事件
    • 處理鼠標事件
    • 鼠標移動事件
    • 處理鍵盤事件
    • 定時器事件
    • 窗口移動和大小改變事件
    • 結語

很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!!
在這里插入圖片描述
作者:?( ‘ω’ )?260
我的專欄:qt,Linux,C++進階,C++初階,數據結構初階,題海探驪,c語言
歡迎點贊,關注!!

qt系統

事件

事件是應用程序內部或者外部產生的事情或者動作的統稱。在qt中由QEvent該類來表示事件,同時,也衍生出了qt中常見的事件。
在這里插入圖片描述
分別代表鼠標事件,鍵盤事件,定時器事件等等。

事件與信號槽的聯系:信號槽其實封裝了事件,比如qt中內置的信號,但是如果當內置的信號無法達到用戶想要的效果時,此時就必須使用事件來完成。

那我們需要如何處理事件呢?
一定是需要使用多態機制,這些事件在父類中都有對應的虛函數,我們所做的就是需要創建子類,在子類中對虛函數進行重寫
重寫需要滿足三同(函數名,參數類型和個數,返回值),我們可以取巧在qt助手中來搜索對應的函數。

我們來看例子:

處理鼠標事件

通過處理該事件,我們能夠完成鼠標進入和離開任何控件,并對應發出事件的操作。
我們先來講一點細節,這里使用label控件,實現當鼠標進入該控件的時候,實現對應的日志打印,同時,鼠標離開該控件的時候,也實現日志的打印。

為什么我這里使用label來實現呢?其實使用什么控件都是可以的,主要就是需要看范圍是什么,如果想鼠標進入離開事件并實現日志打印在Widget界面上的話,就需要對QWidget控件的子類進行該信號得重寫。

我們先給QLabel創建一個子類label:
在這里插入圖片描述
隨后我們來完善一下子類的信息,我們需要完善一下構造函數,因為父類的構造函數有參數:
在這里插入圖片描述
我們使用qt assistant來搜索enterEvent和leaveEvent,這樣保證函數不會寫錯,同時,我們對該虛函數在子類中完成重寫:
在這里插入圖片描述
我們運行代碼,來看結果,發現日志并沒有打印,這個是怎么回事呢?答案其實在ui文件中,我們能夠發現,我們創建的label掛在對象樹上掛的是什么類型,是QLabel類型:
在這里插入圖片描述
我們需要對其進行轉換,右鍵控件->提升為:
在這里插入圖片描述
一定要保證提升類名稱和我們創建的子類名稱是相同的,否則仍然會出現問題(我們子類類型叫label)。
在這里插入圖片描述
此時成功修改,這里還有一個細節,一定注意名字不要和類型起的沖突了,再來看結果:
在這里插入圖片描述
使用鼠標點擊事件我們能夠獲得鼠標更多的詳細信息,比如鼠標的位置,鼠標的操作主要分為兩類,鼠標按下,鼠標松開,這兩個動作合成一起的話可以構成一個鼠標點擊,同理,也有鼠標雙擊的,直接來看代碼:
在這里插入圖片描述
注意:此時我點擊的是控件左上角位置,此時坐標非常小,說明控件的原點坐標在左上角。
如果說我們使用globalX()函數,此時坐標就以顯示屏左上角為基準算的了:
在這里插入圖片描述
我們Widget界面是800x600的,此時坐標都達到了875,足以說明此時坐標原點是顯示器左上角。

還有其他事件,而且Event中還能夠知道用戶按下了什么鍵,比如:左鍵,右鍵,來看代碼:
在這里插入圖片描述
鼠標雙擊其實也是和上面單擊,按下,釋放一樣的,這里不再演示了。

鼠標移動事件

顧名思義,當鼠標發生移動的時候,該事件就會觸發。
來看代碼:
在這里插入圖片描述
發現這樣寫,當Widget界面出來之后,我們在Widget界面上進行移動,發現并沒有日志打印出來,這個又是什么原因呢?
因為鼠標移動事件輕輕移動鼠標,就會產生大量的鼠標移動事件,就需要有大量的事件需要捕捉,無疑這會對程序造成效率降低,所以我們必須強制設置一下捕捉該信號:
在這里插入圖片描述
當我們在Widget構造函數中添加上這一段話的時候,再來看結果:
在這里插入圖片描述

處理鍵盤事件

在以前的學習中,其實我們已經接觸過鍵盤事件,只是我們不知道,其實QShortcut設置快捷鍵就是使用事件來完成的,就是使用qsequence這個類

這里我們可以通過鍵盤事件獲取單個按鍵,當然也可以獲取兩個按鍵,比如快捷鍵的方式。

我們這里新創建一個項目,因為創建的Widget本身就是繼承QWidget,上面例子只能夠在label范圍中使用,此時我們就能夠在整個Widget中使用了!!
在這里插入圖片描述
此時打印日志成功顯示,這里還有一個細節,因為我們此時的可操作范圍是Widget,我們一定要選擇Widget界面之后,再來按下A鍵,日志才會打印,如果沒有選中,此時輸入A就是輸入法輸入的A。
在這里插入圖片描述
接下來我們再來實現快捷鍵的形式,我們需要使用到modifirs這個類,來看代碼:
在這里插入圖片描述
這里的效果和上面的一樣的,按下對應按鍵,出現日志信息。

定時器事件

定時器事件其實和我們之前學習了定時器類似,而且,定時器時間比控件形式還需要進行手動的管理timeId,還需要區分是哪個timeEvent發出的信號,所以,定時器事件更麻煩一些,推薦使用控件形式,我們直接來看代碼:
在這里插入圖片描述
隨后其實就是一個10秒的倒計時器了,這個結果我們就不在演示了!

窗口移動和大小改變事件

通過窗口位置或者窗口大小的改變就會觸發該信號,我們直接來看代碼:
在這里插入圖片描述
直接來看結果:
在這里插入圖片描述
當我們每次移動或者縮放Widget窗口的時候,就會打印日志,你們應該是連續的打印,因為我的qt版本有點老。

結語

感謝大家的認真閱讀,不足之處歡迎留言指正,我們下期再見!
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux機器可直接使用的自動化編譯文件

還在為了Linux機器上一遍遍輸入編譯指令苦惱嗎?你需要make指令以及自己的makefile文件!在makefile中寫入自己的個性化指令,讓編譯速度飛起,支持多文件編譯一下文件為個人應用,可以直接cp到相應項目的目錄,每…

Linux學習-數據結構(哈希表)

1.哈希表1.哈希算法將數據通過哈希算法映射成一個關鍵值,存放都在同一位置實現數據的高效存儲和查找,將時間復雜度盡可能降低至O(1)2.哈希碰撞多個數據通過哈希算法得到的鍵值相同,稱為產生哈希碰撞3.哈希表構建哈希表…

Google Chrome <139.0.7236.0 UAF漏洞

【高危】Google Chrome <139.0.7236.0 UAF漏洞 漏洞描述 Google Chrome 是美國谷歌&#xff08;Google&#xff09;公司的一款Web瀏覽器。 受影響版本中&#xff0c;OpenscreenSessionHost::ReportAndLogError 方法的參數使用了 std::string_view 類型來接收錯誤消息。當一…

CentOS8 Stream 網卡配置及重啟

在 CentOS 8 Stream 中&#xff0c;網卡配置已由 NetworkManager 管理&#xff0c;傳統的 ifcfg-eth0 文件仍然支持&#xff0c;但推薦使用 nmcli 或 nmtui 工具進行網絡配置和管理。以下是網卡配置及重啟的詳細步驟&#xff1a;1. 查看當前網卡狀態列出所有網卡bash復制nmcli …

SpringMvc的原理深度剖析及源碼解讀

一、springmvc啟動加載流程1、引入spring-web.jar包時&#xff0c;在這個包的META-INF/services/javax.servlet.ServletContainerInitializer文件中定義的加載類SpringServletContainerInitializer,提供給springmvc實現初始化的操作。2、在SpringServletContainerInitializer類…

【ESP32-menuconfig(1) -- Build Type及Bootloader config】

Build Type Bootloader configmenuconfig介紹Build typeCONFIG_APP_BUILD_TYPECONFIG_APP_BUILD_TYPE_PURE_RAM_APPCONFIG_APP_REPRODUCIBLE_BUILDCONFIG_APP_NO_BLOBSCONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERSCONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERSBootloader config…

C++信息學奧賽一本通-第一部分-基礎一-第3章-第1節

C信息學奧賽一本通-第一部分-基礎一-第3章-第1節 2051 偶數 #include <iostream>using namespace std;int main() {int number; cin >> number;if (number % 2 0) {cout << "yes";} }2052 范圍判斷 #include <iostream>using namespace std…

自由學習記錄(79)

PBRBRDF原理&Unity實現深入淺出_嗶哩嗶哩_bilibili 進行改進 一個像素點對應一個范圍內的 一個微表面--一個由無數個起起伏伏的結構組成的物理結構 屏幕上的每一個像素點&#xff0c;在渲染時通常會被視為一個“微表面”的代表 比如在這個圖中&#xff0c;只關心紅色的區…

復雜路況誤報率↓78%!陌訊輕量化模型在車輛違停識別的邊緣計算優化?

一、行業痛點&#xff1a;動態交通場景的識別困境據《2024中國智慧交通白皮書》統計&#xff0c;城市核心路段違停誤報率高達35%&#xff0c;主要源于兩大難點&#xff1a;??短暫停靠干擾??&#xff1a;出租車臨時停靠與違停行為特征重疊??復雜背景干擾??&#xff1a;樹…

大語言模型提示工程與應用:提示詞基礎使用方式

提示詞使用方式 學習目標 在本課程中&#xff0c;我們將學習更多關于提示詞使用方式。 相關知識點 提示詞使用 學習內容 1 提示詞使用 1.1 文本摘要 語言模型最典型的應用場景之一就是文本摘要。我們可以通過以下提示實現基礎摘要功能&#xff1a; 提示: 解釋抗生素是什么回答&…

常見命令-資源查看-iostat命令實踐

文章目錄 系統中未安裝 iostat 命令 1. 監控CPU與磁盤的基礎負載 2. 診斷I/O性能瓶頸 3. 實時監控與動態采樣 4. 特定設備或分區的精細化監控 5. 性能測試與基準數據生成 6. 結合其他工具進行綜合調優 總結 結果輸出速查表 第一部分:CPU統計信息 第二部分:設備/磁盤統計信息(…

WinForm 實戰 (進度條):用 ProgressBar+Timer 打造動態進度展示功能

目錄 核心控件解析? ProgressBar 進度條? Timer 定時器? 實戰案例 常見應用場景? 總結? 在 WinForm 桌面應用開發中&#xff0c;進度反饋是提升用戶體驗的關鍵環節。無論是文件處理、數據加載還是復雜計算&#xff0c;一個直觀的進度條能讓用戶清晰了解任務狀態&…

使用 ast-grep 精準匹配指定類的方法調用(以 Java 為例)

使用 ast-grep 精準匹配指定類的方法調用&#xff08;以 Java 為例&#xff09; 在代碼重構、安全審計或靜態分析的場景中&#xff0c;我們常常需要匹配某個特定類中定義的方法調用。而 ast-grep 作為一款基于語法樹的代碼搜索工具&#xff0c;提供了強大的模式匹配功能&#…

Dijkstra?spfa?SPstra?

帶負權的無負環最短路問題 對于一張有負邊權的圖&#xff0c;普通 Dijkstra 就不能用了&#xff0c;比如&#xff1a;正常的 Dijkstra 擴散的節點依次為 1,3,2,41,3,2,41,3,2,4。 這時候可以發現&#xff0c;當點 222 擴散的時候&#xff0c;原本達到點 333 的路徑長度是 111&a…

React函數組件靈魂搭檔:useEffect深度通關指南!

你以為它只是替代componentDidMount&#xff1f;數據抓取、事件綁定、定時清理...&#xff1f;事實上&#xff0c;useEffect才是函數組件的“幕后操控者”&#xff01;但依賴數組的坑、閉包的陷阱&#xff0c;你真的玩轉了嗎&#xff1f; 告別“能用就行”&#xff0c;今天帶你…

LabVIEW實驗室測試框架

在實驗室測試場景中&#xff0c;選用合適的 LabVIEW 框架能夠極大提升測試效率、優化測試流程并保障測試結果的準確性。介紹幾款常用且功能強大的 LabVIEW 測試框架&#xff1a;?TestStand?框架概述?TestStand 是 NI 公司專為測試系統開發設計的一款測試執行管理框架。它能夠…

Kiro :從“規范”到“實現”的全流程 AI 助手

為什么是 Kiro Kiro 是一款面向“規范驅動開發”&#xff08;Spec-Driven Development&#xff09;的 AI 開發助手。與只在“寫代碼”環節輔助不同&#xff0c;Kiro 將“從需求到設計再到實現”的完整鏈路顯性化&#xff0c;把需求、設計、任務分解、代碼與測試、文檔等全部納…

【0基礎PS】PS工具詳解--矩形工具

目錄前言一、矩形工具的基礎認知?二、矩形工具的選項欄詳解?三、矩形工具的繪制技巧?四、矩形工具的實際應用場景?五、常見問題與解決方案?總結前言 在 Photoshop&#xff08;簡稱 PS&#xff09;的眾多繪圖工具中&#xff0c;矩形工具是使用率極高的基礎工具之一。無論是…

移動端app專項測試

學習目標&#xff1a;app專項測試知識點&#xff0c;其他知識擴充一、app專項&#xff08;app怎么測試/app側重點在哪&#xff09;1.功能&#xff1a;跟前面功能測試一樣&#xff08;跟需求文檔提取測試點&#xff0c;編寫測試用例&#xff09;2.安裝1.不同品牌安裝,不同操作系…

Spring Boot 結合 CORS 解決前端跨域問題

Spring Boot 結合 CORS 解決前端跨域問題 1. 背景 在前后端分離的項目中&#xff0c;前端&#xff08;例如 http://localhost:3000&#xff09;調用后端接口&#xff08;例如 http://localhost:8080&#xff09;時&#xff0c;瀏覽器會因為 同源策略 限制而阻止請求&#xff0c…