QT窗口相關控件及其屬性

widget,PushButton,lineEdit等都是基于QWidget延展出來的

并不是完整的窗口,而是作為窗口的一部分

真正的窗口是QMainWindow

菜單欄

Qt中的菜單欄是通過QMenuBar這個類來實現的,一個主窗口最多只有一個菜單欄,位于主窗口頂部,主窗口標題欄下面。

菜單欄中包含菜單,菜單中包含菜單項

如:

例:

創建QMainWindow文件

QMainWindow的ui文件中的對象樹和QWidget文件對象樹不同

自帶中央控件,菜單欄,狀態欄

在左上角輸入是創建新的菜單QMenu

在已經創建號的菜單進行輸入是創建菜單項QAction

但是發現在創建菜單項時無法輸入中文,可以在其它位置輸入中文后粘貼到此處進行創建,可以在對象樹進行菜單,菜單項的移除

使用代碼創建菜單結構

實現菜單項的槽函數

但是此時點擊菜單項無反應,可以通過triggered---觸發來實現

當點擊QAction時會觸發一個信號---triggered觸發

通過設置triggered的槽函數來實現點擊QAction時,執行對應操作

在MinWindow.h文件中聲明槽函數

在cpp文件中進行connect

進行槽函數的定義

在次運行程序后,點擊文件菜單下的添加文件菜單項可以在輸出窗口進行debug輸出

還可以給菜單,菜單項添加快捷鍵

設置快捷鍵搭配alt使用

實現菜單和菜單項的快捷鍵

在創建菜單和菜單項時,給其內文本加上(&字母),就可以通過alt+字母進行快捷訪問,也可以通過創建QShortCut對象來實現快捷鍵

例:

就可以通過長按alt,按f,按n在輸入框輸出debug內容

添加子菜單

菜單欄--->菜單--->子菜單---->菜單項

通過QMenu提過的addMenu來在菜單內添加菜單,實現子菜單

例:

通過將鼠標懸停在箭頭上展開子菜單

添加分隔線

分割線用于對菜單里的菜單項進行分組---通過QMenu提供的addSeparator實現

例:

給菜單添加圖標

使用QIcon類,通過qrc機制引入圖片

導入圖片后通過QAction的setIcon進行圖片設置

如果給QMenu設置圖標,那么就會將文本遮蓋

如:

注意事項---MenuBar的內存泄漏

在通過代碼創建菜單欄時,是通過

方式創建

但是若是在創建項目時,沒有勾選自動生成ui文件程序才正常運行

如果勾選了自動生成ui文件,則會造成內存泄漏,因為Qt自動生成了一個QMenuBar---在創建QMainWindow文件時自動生成一個menubar和statuebar

在代碼中創建新的menubar設置進mainwindow時,導致舊的menubar脫離Qt的對象樹,在后續程序結束時無法自動釋放

解決方法:如果menubar已經存在就獲取,如果不存在就創建

工具欄

QToolBar----工具欄是應用程序中集成各種功能事項快捷鍵使用的一個區域,可以有多個,也可以沒有----默認沒有,需要手動創建。可以將工具欄進行手動移動位置

添加工具欄使用的是addToolbar,而不是set,而菜單欄的添加使用的是setMenubar,因為菜單欄只能有一個,而工具欄可以有多個

例:

給工具欄添加菜單項

實現工具欄中菜單項

在頭文件聲明槽函數

在構造函數進行信號槽綁定

實現槽函數

點擊工具欄對應選項實現debug輸出

實現工具欄中的菜單項的圖標

通過qrc機制引入圖片

將圖標設置進工具欄中的菜單項

文本被圖標覆蓋掉

但是若將鼠標停留在工具上,會給出在創建菜單項時設置的文本作為提示

也可以手動設置tooltip

QAction重復釋放問題

QAction既可以添加到QMenu,同時也可以添加到QToolBar,當一個QAction同時出現在QMenu和QToolBar時,若在其中一個被刪除,不會造成重復釋放,釋放一個QAction內存后,不會在另一個菜單被釋放

創建多個工具欄

基礎效果

默認情況下,兩個工具欄都在對頂層的同一行

可以通過拖拽工具欄頭部的點進行移動工具欄

MainWindow提供addToolBar在添加工具欄時設置工具欄初始位置

相關選項

選項

說明

Qt::LeftToolBarArea

停靠在左側

Qt::RightToolBarArea

停靠在右側

Qt::TopToolBarArea

停靠在頂部

Qt::BottomToolBarArea

停靠在底部

Qt::AllToolBarAreas

四個位置都能停靠

如:

QToolBar還提供setAllowedAreas來設置運行停靠的位置

設置后就只能停靠在左右,若拖動到上下邊緣則會懸浮

也可以設置ToolBar不允許浮動---setFloatable(bool)

設置后就不能懸浮在窗口中,只能停靠在邊緣

還可以設置不允許移動---setMoveabel(bool)

就無法拖動ToolBar

狀態欄

狀態欄是應用程序中輸出簡要信息的區域。一般位于主窗口最底部,一個窗口最多只能有一個狀態欄。

在Qt中狀態欄是通過QStatusBar類實現

在狀態欄中可以顯示的消息類型有:

實時消息:如當前程序狀態,鼠標位置

永久消息:如程序版本號

進度消息:如進度條提示,版本消息

同樣,在勾選了自動生成ui文件的情況下,默認就生成了一個statusbar,在代碼進行使用時直接獲取,如果沒有才進行創建,避免內存泄漏

例:

設置臨時消息----showMessage()

可以在添加臨時消息時設置顯示時間,單位為毫秒

當達到時間后,臨時消息會自動消失

在狀態欄中添加子控件

若存在showMessage則不會顯示子控件,因為showMessage會將子控件覆蓋

也可以添加多個子控件

在狀態欄中添加狀態條

狀態條---QProgressBar

浮動窗口

浮動窗口---QDockWidget

通過addDockWidget將浮動窗口添加到當前窗口內,第一個參數為添加到當前窗口的位置

如:

Qt::LeftDockWidgetArea ??放到左側

Qt::RightDockWidgetArea ?放到右側

Qt::TopDockWidgetArea ???放到頂部

Qt::BottomDockWidgetArea 放到底部

雙擊浮動窗口進行展開

給浮動窗口添加控件

不能直接將控件添加到浮動窗口中,而是要先創建一個QWidget,設置一個布局管理器,將要添加的控件,放到布局管理器中,再將QWidget設置到dockWidget中,否則就只能項dockWidget中添加一個控件

例:

同樣可以對浮動窗口可以停靠的位置進行設置

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

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

相關文章

day47—雙指針-平方數之和(LeetCode-633)

題目描述 給定一個非負整數 c ,你要判斷是否存在兩個整數 a 和 b,使得 a^2 b^2 c 。 示例 1: 輸入:c 5 輸出:true 解釋:1 * 1 2 * 2 5示例 2: 輸入:c 3 輸出:f…

藍橋杯 20. 壓縮變換

壓縮變換 原題目鏈接 題目描述 小明最近在研究壓縮算法。他知道,壓縮時如果能夠使數值很小,就能通過熵編碼得到較高的壓縮比。然而,要使數值變小是一個挑戰。 最近,小明需要壓縮一些正整數序列,這些序列的特點是&a…

element-ui多個form同時驗證,以及動態循環表單注意事項

多個form同時驗證: validateForm(refs) {if (!refs) {return false}return new Promise((resolve, reject) > {refs.validate().then((valid) > {resolve(valid)}).catch((val) > {resolve(false)})}) }, async handleConfirm() {Promise.all([this.valid…

Spring Boot中自定義404異常處理問題學習筆記

1. 問題背景 在Spring Boot項目中,需要手動返回404異常給前端。為此,我創建了一個自定義的404異常類UnauthorizedAccessException,并在全局異常處理器GlobalExceptionHandler中處理該異常。然而,在使用Postman測試時,…

你學會了些什么220622?--搭建UI自動化

jenkins訪問地址:http://192.168.82.129:8080/ 賬號密碼:admin/a123456a ***** 什么是UI自動化** 使用工具或者腳本對需要測試的軟件的前端界面在預設的條件下,在已有的測試數據下運行系統或者應用程序,并獲取其前端頁面UI顯示的…

【2025計算機網絡-面試常問】http和https區別是什么,http的內容有哪些,https用的是對稱加密還是非對稱加密,流程是怎么樣的

HTTP與HTTPS全面對比及HTTPS加密流程詳解 一、HTTP與HTTPS核心區別 特性HTTPHTTPS協議基礎明文傳輸HTTP SSL/TLS加密層默認端口80443加密方式無加密混合加密(非對稱對稱)證書要求不需要需要CA頒發的數字證書安全性易被竊聽、篡改、冒充防竊聽、防篡改…

JavaFX 第一篇 Hello World

1、簡介 JavaFX 是一個用于構建客戶端應用程序的 Java 庫,作為 Java 標準庫的一部分(JDK 8 到 10),從 JDK 11 開始,JavaFX 將以獨立模塊發布,將不再包含在 JDK標準庫中,他是 Java 應用程序開發的…

SQL實戰:02之連續數問題求解

文章目錄 概述題目:體育館的人流量題解步驟一:構造出一個連續序列步驟二:找出符合條件的組的序號步驟三:fetch結果,使用內連接過濾出符合條件的記錄。完整SQL 題目二:連續出現的數字題解步驟一:分區并構建連…

STM32 的 GPIO和中斷

GPIO的簡單介紹 內部結構 施密特觸發器(TTL肖特基觸發器) 的工作原理: 施密特觸發電路(簡稱)是一種波形整形電路,當任何波形的信號進入電路時,輸出在正、負飽和之間跳動,產生方波或…

Server - 優雅的配置服務器 Bash 環境(.bashrc)

歡迎關注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/147335592 免責聲明:本文來源于個人知識與公開資料,僅用于學術交流,歡迎討論,不支持轉載。 登錄服…

使用PyTorch實現圖像增廣與模型訓練實戰

本文通過完整代碼示例演示如何利用PyTorch和torchvision實現常用圖像增廣方法,并在CIFAR-10數據集上訓練ResNet-18模型。我們將從基礎圖像變換到復雜數據增強策略逐步講解,最終實現一個完整的訓練流程。 一、圖像增廣基礎操作 1.1 準備工作 #matplotli…

解決Mac 安裝 PyICU 依賴失敗

失敗日志: 解決辦法 1、使用 homebrew 安裝相關依賴 brew install icu4c 安裝完成后,設置環境變量 echo export PATH"/opt/homebrew/opt/icu4c77/bin:$PATH" >> ~/.zshrcecho export PATH"/opt/homebrew/opt/icu4c77/sbin:$PATH…

Springboot后端查詢參數接收

1.實現方式 假設前端發送的接口: /users?nameJohn&age30 后端怎么接收里面的name和age呢?以及再發別的參數后端怎么接收呢? 1.比較簡單的方式 當控制器方法的參數類型是簡單類型(如 String、Integer、Long 等&#xff09…

桌面應用中VUE使用新瀏覽器窗口打開頁面

1、瀏覽器應用忽略此方式,可任意方式打開。針對桌面應用設置 newWindowClick(){try {this.fileUrl "";this.params.year ""this.params.date ""axios({method: post,url: /url/pdf/preview,data: this.params,}).then(res> {t…

華為手機怎么進行音頻降噪?音頻降噪技巧分享:提升聽覺體驗

在當今數字化時代,音頻質量對于提升用戶體驗至關重要,無論是在通話、視頻錄制還是音頻文件播放中,清晰的音頻都能帶來更佳的聽覺享受。 而華為手機憑借其強大的音頻處理技術,為用戶提供了多種音頻降噪功能,幫助用戶在…

【數據可視化-22】脫發因素探索的可視化分析

?? 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個…

青少年編程與數學 02-018 C++數據結構與算法 06課題、樹

青少年編程與數學 02-018 C數據結構與算法 06課題、樹 一、樹(Tree)1. 樹的定義2. 樹的基本術語3. 常見的樹類型4. 樹的主要操作5. 樹的應用 二、二叉樹(Binary Tree)1. 二叉樹的定義2. 二叉樹的基本術語3. 二叉樹的常見類型4. 二叉樹的主要操作5. 二叉樹的實現代碼說明輸出示例…

【論文閱讀】Visual Instruction Tuning

文章目錄 導言1、論文簡介2、論文主要方法3、論文針對的問題4、論文創新點總結 導言 本論文介紹了一個新興的多模態模型——LLaVA(Large Language and Vision Assistant),旨在通過指令調優提升大型語言模型(LLM)在視覺…

【學習筆記】Cadence電子設計全流程(三)Capture CIS 原理圖繪制(下)

【學習筆記】Cadence電子設計全流程(三)Capture CIS 原理圖繪制(下) 3.16 原理圖中元件的編輯與更新3.17 原理圖元件跳轉與查找3.18 原理圖常見錯誤設置于編譯檢查3.19 低版本原理圖文件輸出3.20 原理圖文件的鎖定與解鎖3.21 Orca…

js使用IntersectionObserver實現目標元素可見度的交互

文章目錄 1、前言2、代碼實現3、使用場景4、兼容性5、成熟的Hooks推薦 1、前言 IntersectionObserver 是瀏覽器原生提供的一個Api。可以"觀察"我們的元素是否可見,原理是判斷目標元素與可見區域的交叉比例,所以也被稱為"交叉觀察器"…