Qt常用控件之QWidget(二)

Qt常用控件(二)

  • 1.window frame
  • 2.windowTitle
  • 3.windowIcon

🌟🌟hello,各位讀者大大們你們好呀🌟🌟
🚀🚀系列專欄:【Qt的學習】
📝📝本篇內容:window frame;windowTitle;windowIcon
????上一篇:Qt練習小程序(無法拒絕的按鈕)
💖💖作者簡介:軒情吖,請多多指教(>> ????? ) ??-

1.window frame

在這里插入圖片描述
在我們之前的使用geometry的時候,并沒有去關注過窗口的尺寸具體指的是哪一部分,是包含標題欄那一行以及其他三邊框呢還是不包含。
其實這個用專業的叫法是window frame即窗口框架,這是操作系統自帶的內容
因此Qt中也提供了不同的API來供尺寸和大小使用

函數聲明函數功能
frameGeometry返回值是QRect類型,計算時包含 window frame
geometry返回值是QRect類型,計算時不包含window frame

我們可以寫一份代碼來看看它們的不同之處
在這里插入圖片描述
在這里插入圖片描述
我們可以發現再構造函數里面怎么是一模一樣的,而且x和y都是0呢?而到了后面按鈕的槽函數中就正常了
這主要是因為代碼是在構造函數中,我們的Widget還沒有完全創建好,還在構造,還沒有被添加到window frame中,看不到window frame帶來的影響,因此就會出現這種情況。但是一旦出了構造函數,比如我們按鈕在槽函數中打印的內容,它就沒問題了,因為此時我們的窗口已經完全構造好了
我們可以稍微淺淺的看一下帶window frame和不帶的區別,首先是x它們之間差了1是因為我們的左側邊框,而y差了那么多的原因是因為標題欄占的位子大。而它的尺寸也是差不多道理,寬度width是因為左右兩邊的邊框各占1像素所以說是2,而高度height是由于標題欄的原因就會大很多。并且window frame比起單純的窗口會占更大空間,因此在位置上,window frame會比單純的窗口坐標位置更小,而在尺寸上會更大。
在這里插入圖片描述

2.windowTitle

這個屬性肯定非常熟悉了,就是窗口標題,但是有個注意事項,就是這個屬性來自于QWidget,設置的時候如果是頂層 widget (獨?窗?), 這個操作才會有效,其余的子widget,這個操作則沒有任何效果。簡單來說就是只有窗口widget可以來設置屬性,其余的像按鈕啊這些控件,雖然都是多多少少繼承于QWidget,但都是子控件,所以它們設置時,不會有任何效果。見下面代碼演示
在這里插入圖片描述
從理論上來講,不應該給按鈕這樣的功能來設置標題,雖然設置后沒有任何的報錯和效果,但是這樣的設定其實是不太合理的。

3.windowIcon

接下來要將的是windowIcon,這個其實指的是程序的圖標,如下展示,它分別在任務欄或程序界面上顯示
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述我們默認的圖標就如上圖一樣,沒有任何的觀賞性,也沒有任何的含義
因此Qt也給我們提供了這方面的API

函數聲明函數功能
QIcon windowIcon() const獲取到控件的窗?圖標,返回 QIcon 對象
void setWindowIcon(const QIcon &icon)設置控件的窗?圖標

同樣的,對于windowIcon而言,僅僅是對頂層widget有效
接下來代碼演示
先在想要的路徑下保存一張圖片,記住它的位置和名字
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
代碼非常簡單,功能也實現了,但是有幾個問題
首先肯定是有同學會疑惑,為什么這里不使用堆上開辟呢,而是直接使用棧幀上的呢?
在我們之前之所以使用動態開辟是因為我們要保證我們的控件有足夠的生命周期并且加入對象樹中在合適的時候釋放內存,但是QIcon本身是一個比較小的對象,創建后并且已經設置進Widget窗口內部,因此無論釋放不釋放,都不會影響最后的顯示。并且QIcon不支持對象樹,無法將它掛到父對象下。
接下來要講的是路徑,首先就是不能帶中文,其次我們在演示中使用的是正斜杠\,但是如果想要使用反斜杠\就要注意了,它在C/C++中代表的是轉義字符,因此使用時需要使用雙反斜杠
在這里插入圖片描述
但是這樣寫還是會有問題,那就是這個路徑是絕對路徑,作為開發者,你無法做不到保證用戶的路徑也是這樣,萬一用戶是只有一個C盤呢?還有一個情況,那就是萬一用戶不小心把這張圖片給刪了怎么辦呢?
因此我們使用相對路徑會比絕對路徑更好,相對路徑是以給定的路徑為基準,以.和…開頭。但是這種方法依舊解決不了用戶把圖片搞丟的情況,因此Qt中還提供了qrc機制
這個機制可以解決兩個問題:
防止用戶把圖片給不小心搞丟
確保用戶的機器上有圖標的路徑
因此要使用這個機制就需要在項目中創建一個新的xml文件(.qrc后綴),在xml文件中,將圖片的數據導入進來,并且在xml中記錄下來,Qt在編譯項目的時候,就會根據qrc中描述的圖片信息,找出圖片內容,再提取出圖片的二進制數據,把這些二進制數據轉成C++代碼,最后一起編譯到exe可執行文件中。但是qrc對于很大的文件無法導入,比如幾個G的視頻文件
接下來講一下怎么創建qrc文件
在這里插入圖片描述
在這里插入圖片描述
文件名可以不帶后綴,系統會自動添加為.qrc
在這里插入圖片描述在這里插入圖片描述
創建完文件后,我們就是上圖這樣的一個界面,接下來就是需要先創建一個虛擬目錄,所謂的虛擬目錄就是在電腦上不存在的,是Qt抽象出來的,這主要是為了方便Qt去訪問圖標
在這里插入圖片描述
接下來就可以使用Add Files來添加圖標了,找到我們的圖片
在這里插入圖片描述
在這里插入圖片描述
我們添加的文件就是在之前的prefix前綴路徑下的,但是發現報錯了,說是路徑有問題。
這其實我們的圖片文件在qt路徑下,但是實際上我們需要保證我們的圖標是在.qrc文件的同一目錄下或者是同一目錄下的子目錄下才可以
因此將圖標移動到當前項目的路徑下即可
在這里插入圖片描述
在這里插入圖片描述當界面是這樣就說明成功了,這個時候我們就可以使用剛剛的前綴+文件名來設置圖標了
在這里插入圖片描述
當代碼中需要訪問qrc管理的文件時就需要在路徑前面加上:
接下來我們就又可以去Qt自動生成的代碼中瞧一瞧,有沒有什么變化沒有
在這里插入圖片描述
在當前文件夾中倒是什么都發現,但是debug文件中似乎多了一個.cpp結尾的qrc文件,這個就是生成的C++文件
在這里插入圖片描述
在這里插入圖片描述
打開后可以發現一個char類型的數組,它其實每一個字節都是圖標里每一個字節的數據
總結:qrc機制將圖片的二進制數據轉換成C++代碼,C++代碼中就會有一個很大的char類型數組,其中的每一個字節就是圖標的二進制轉換而來的,當Qt編譯項目的時候,就會將這個.cpp文件一起編譯到.exe文件中,當exe運行時,這個圖標也就被加載到了內存中。通過這種方式即解決了圖標路徑不一致的問題,也保護了圖標的存在性。

🌸🌸Qt常用控件之QWidget(二)大概就講到這里啦,博主后續會繼續更新更多Qt的相關知識,干貨滿滿,如果覺得博主寫的還不錯的話,希望各位小伙伴不要吝嗇手中的三連哦!如有小伙伴需要Qt的安裝包可以私信我,你們的支持是博主堅持創作的動力!💪💪

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

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

相關文章

飛算Java AI:專為 Java 開發者打造的智能開發引擎

目錄 一,核心功能 1,智能編碼(AI Coding) 2,AI 驅動測試(AI Testing) 3,智能運維(AIOps) 4,工程化支持 二、注冊與上手:3 分鐘快…

基于開源AI大模型AI智能名片S2B2C商城小程序源碼的私域流量新生態構建

摘要:私域流量并非新生概念,企業持續構建和經營“企業 - 客戶”關系是其持續存在的關鍵,且會隨時代發展自我完善迭代。本文探討了開源AI大模型AI智能名片S2B2C商城小程序源碼在私域流量領域的應用價值。通過分析私域流量發展現狀與挑戰&#…

用 ELK+Filebeat 提高50%問題排查效率,這套方案實測有效!

摘要 在中大型系統中,日志的分布常常讓問題排查變得異常痛苦:每次出錯都要登錄一堆服務器、翻一堆文本,還不一定能找到關鍵線索。為了解決這個問題,ELK(Elasticsearch、Logstash、Kibana)日志聚合平臺應運而…

數據治理到底是什么?搞清這四件事,你就徹底明白了!

目錄 第一件事:數據治理不是做“數據”,是做“管” 第二件事:治理的核心,是“數、責、權”的三角綁定 一是“數”:你到底有哪些數據? 二是“責”:每張表、每個字段是誰負責? 三…

Spring的事務控制——學習歷程

思考:1. 事務是干什么的?2. 事務的特性?3. 事務控制的傳播方式(傳播行為)4. 事務的隔離級別5. 事務是如何實現的?6. 事務的回滾方式7. 事務失效場景回答:1. 事務和鎖,還有版本控制 …

鴻蒙 Secure Boot 全流程解析:從 BootROM 到內核簽名驗證的實戰指南

摘要 隨著智能設備應用的深入,操作系統安全成為設備可信運行的基礎。在物聯網和多終端場景中,一旦系統被惡意篡改,將帶來數據泄露、設備被控等嚴重后果。鴻蒙系統在安全啟動方面設計了完整的機制,從最底層的 Boot ROM 開始逐級校驗…

tailwindCSS === 使用插件自動類名排序

目錄 類如何排序 自定義 實戰應用 .prettierrc package .eslintrc 人們一直在討論在 Tailwind 項目中對實用程序類進行排序的最佳方法。今天,我們很高興地宣布,隨著我們官方 prettier-plugin-tailwindcss 的發布,您終于可以不用為此擔…

數據結構 —— 鍵值對 map

目錄 map的若干操作 1、emplace() 2、find(key) 3、count(key) 4、lower_bound 和 upper_bound 5、erase() 6、empty() 7、降序的map 計蒜客T3603 叫號系統 題意: 解題思路: Code: Leetcode1309 解碼字母到整數映射 題意: 解題…

C++ 性能優化指南

C 性能優化指南(針對 GCC 編譯器,面向高級工程師面試) 代碼優化面試常問點: 如何避免不必要的對象拷貝?為什么要用引用或 std::move?虛函數調用有什么性能開銷?原理解釋: 傳遞對象時…

拼數(字符串排序)

題目描述設有 n 個正整數 a1?…an?,將它們聯接成一排,相鄰數字首尾相接,組成一個最大的整數。輸入格式第一行有一個整數,表示數字個數 n。第二行有 n 個整數,表示給出的 n 個整數 ai?。輸出格式一個正整數&#xff…

【MySQL】函數學習-字符串函數

一、MySQL字符串函數基礎回顧 在MySQL中,字符串函數用于處理文本數據,常見場景包括數據拼接、格式轉換、清洗等。以下是核心函數速覽:函數名作用說明基礎示例(獨立運行)CONCAT(s1,s2)拼接多個字符串SELECT CONCAT(heel…

AI不是“心智的蒸汽機“:重新理解人工智能的本質

當我們談論人工智能時,最常聽到的比喻是"心智的蒸汽機"——一個能夠自動化認知任務的強大工具。但這個比喻可能從根本上誤導了我們對AI真正潛力的理解。 最近,來自科羅拉多大學丹佛分校和肯尼索州立大學的研究團隊發表了一篇論文[1]&#xff0…

免費的AI Logo工具生成的Logo質量怎么樣?我對比了7個AI Logo生成器,設計必備

你嘗試過用 AI 生成 Logo 嗎?在 AI 巨火的今天,什么事情都可以嘗試用 AI 去做。在品牌設計上也是如此,用 AI 做品牌設計、用 AI 做電商海報、用 AI 做包裝設計等等。不知道你用過哪些 AI 工具,哪些是你覺得好用的。今天我們就來研…

計算機基礎:內存模型

專欄導航 上一篇:WIndows 編程輔助技能:格式工廠的使用 回到目錄 下一篇:MFC 第一章概述 本節前言 本來呢,沒想著在單獨的課節中講解內存模型。但是呢,在我寫過的一些個課節中,我發現,內存…

Sigma-Aldrich 細胞培養實驗方案 | 通過Hoechst DNA染色檢測細胞的支原體污染

目標DNA染色(如間接Hoechst染色技術)一種快速的方法,其可在72小時內獲得結果,這相較于通過培養分離檢測支原體所需的4周時間相比是更加有利的。用DNA染色劑對細胞系進行直接染色可在24小時內獲得結果,但會大大降低靈敏…

需求跟蹤深度解析:架構師視角下的全鏈路追溯體系

需求跟蹤(Requirements Traceability)是確保軟件系統從業務目標到代碼實現全程可追溯的核心實踐,尤其在安全關鍵系統(如航空、醫療)中具有強制性要求。一、需求跟蹤的四大核心價值變更影響分析 精確評估需求變更波及范…

《棒球規則介紹》領隊和主教練誰說了算·棒球1號位

Baseball 101|GM vs Manager 到底誰是球隊話事人? ??權力金字塔:誰說了算?General Manager(總經理/GM)球隊建筑師:負責選秀(Draft)、交易球員(Trade&#x…

電力自動化的通信中樞,為何工業交換機越來越重要?

在“新能源數字化”雙輪驅動下,電力行業正經歷深刻變革,傳統變電站也迎來了向智能化、自動化加速轉型的時代。作為連接站內各級系統與裝置的數據“中樞”,工業以太網交換機已成為現代變電站自動化系統中不可或缺的核心設備。在這場深度重構的…

【Linux倉庫】命令行參數與環境變量【進程·伍】

🌟 各位看官好,我是egoist2023! 🌍 Linux Linux is not Unix ! 🚀 今天來學習命令行參數與環境變量的相關知識。 👍 如果覺得這篇文章有幫助,歡迎您一鍵三連,分享給更多…

R 數據框:深入解析及其在數據分析中的應用

R 數據框:深入解析及其在數據分析中的應用 引言 R語言作為一種強大的統計計算和圖形工具,在數據分析領域有著廣泛的應用。數據框(DataFrame)是R語言中處理數據的一種重要結構,它類似于其他編程語言中的表格或關系數據庫中的表。本文將深入解析R數據框的概念、特點、創建…