文章目錄
- qt常用控件--01
- 上一篇文章的補充
- windowTitle屬性
- windowIcon屬性
- windowOpaCity屬性
- cursor屬性
- font屬性
- 結語
很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!!
今天我們進一步c++11中常見的新增表達
作者:?( ‘ω’ )?260
我的專欄:qt,Linux,C++進階,C++初階,數據結構初階,題海探驪,c語言
歡迎點贊,關注!!
qt常用控件–01
繼上章,我們已經講解了兩個有關QWidget中的屬性,分別是enable屬性和geometry屬性,我們將來介紹新的幾個屬性
上一篇文章的補充
關于window frame對geometry的影響:
window frame包含最小化,最大化,關閉等操作,即qt運行界面最上方的這一欄以及最左側和最右側都有這樣的一塊細邊。這個東西是系統自帶的。
再來看這樣的一個圖:
最左上角是windowframe的原點,而下方一點是Widget的原點~~
所以在設置坐標時,有一個setGeometry接口,還有一個setFrameGeometry接口,總之,如果設置控件的位置的話,需要考慮到window frame的影響。
來看一個示例:
其實不是的,我們來看,在創建rect1和rect2的時候,我放在了Widget
的構造函數中,此時我的整個面板都沒有構造好,怎么可能會有windowframe呢?
我們只需要來添加一個按鈕即可:
因為此時如果用戶點擊按鈕,說明此時按鈕出現在了面板上,說明此時面板已經構建成功了,來看結果:
多出來的部分就是系統加的窗口欄和左右細邊欄~~
windowTitle屬性
api接口:
結論:windowTitle屬性只針對頂部窗口級別生效,對Widget類別是不生效的。
來看代碼:
結論:這里有點雞肋,即雖然我們代碼使用錯誤,但是qt還是不會報錯,這樣就不易發現錯誤
windowIcon屬性
api接口:
這里圖標包含:程序運行的圖標,程序運行時的圖標等等,來看下例:
結論:windowIcon對頂部窗口級別才生效,對普通Widget類別不生效
即:在qt中,我們可以修改上述程序運行時的圖標~
如何修改呢?
我們先要準備一張圖片:
這里我準備了一張籃球的圖片,具體自己想要的圖片可以去到阿里巴巴矢量圖標庫中自取 ~
我們直接來看結果:
我們創建OIcon對象為什么是在棧上創建,而不是在堆上創建,難道棧中的圖片銷毀了還能夠顯示嗎?
結論:1:QIcon,以及后面的QCursor,QFont,QPixMap這些類默認不支持添加到對象樹上,無法指定父類對象,同時,不管這些對象釋不釋放,其中的圖片資源都不會銷毀!!
2:這里尋找文件的方式需要添加一個路徑,而且,這個路徑不能帶有中文。
當然,我們這里填寫的是絕對路徑,也可以填相對路徑,以 . (一個點:表示當前路徑)和 … (兩個點:表示上一級路徑)。
又有一個問題了?當我們寫的程序發布給用戶的時候,能夠保證用戶在這個路徑下也有這個圖片嗎?就算保證有了,難道用戶不會誤刪嗎?
所以,最后一個方式也是最常用的方式qrc機制:
即我們將圖片信息給提取出來,將圖片信息轉換成二進制數字放到編譯的c++代碼中,即和exe文件融為一體了。這樣這個圖片信息能和exe文件同生共死!!
步驟:創建xml文件,后綴為qrc->在該文件中加入圖片信息->qt項目去訪問這個文件信息即可;
下面直接展示步驟:
隨后我們必須在彈出的這個項目界面文件夾中添加該圖片,即必須在同級文件中或者是改級下一級的子文件中添加該圖片
先來看結果:
總結:添加資源之后,qt項目文件想要去訪問xml文件中的資源,應寫為“:+ 前綴 + 文件名” ,“:”表示需要去訪問xml文件中的內容了,然后再寫出資源中的文件名即可。其實這里qt創建了一個虛擬目錄,本質上其實是沒有的
其實這個文件中存儲圖片的信息就是一個數組,里面存儲的是16進制信息
windowOpaCity屬性
api接口:
我們直接來使用代碼舉例,這里我使用兩個PushButton并關聯上對應的槽函數:
此時我們來看打印日志:
我們發現這里不是呈現0.1的形式增加或減少的,其實這是數據在內存中的存儲方式不同,分為整形在內存中存儲和浮點數在內存中存儲。這里不再細細說明,只需要記得,浮點數在內存中的存儲很多時候都是近似值,所以,浮點數不適合比較大小,如0.1 + 0.2 == 0.3編譯器會返回false
這里還有一個細節,在setWindowPoacity()函數中,本身就有判斷現在這個浮點數是否合法,即我把if判斷條件語句去掉之后,仍然不會報錯,是因為內部自己已經判斷了,這是防御性編程的結果,即不管外界用戶輸入這個浮點數怎樣,都是能夠使程序運行的。
cursor屬性
api接口:
這里還是設置光標,上面的windowIcon屬性是設置程序運行時的光標,這里我們是設置的鼠標懸停在改控件上的光標,同理,這里我們仍然需要采用qrc機制:
其實在qt中可以直接修改這個光標,在qt designer中,控件的屬性中就有這樣的一欄:
但是其中的圖標確實有些年代的氣息~~
我們直接使用qrc進制,來制造我們想要的鼠標懸停在該控件上的圖標。
因為無法截圖顯示,只能同學們自行驗證,如何覺得圖片太大,可以使用QPixmap中的scaled函數來執行縮放,同時,因為鼠標變化,默認熱點是在左上角,但是也可以通過QPixmap對象構造Qcursor對象時,指定熱點位置,單位仍然是像素。這里的熱點是鼠標點擊的那個點~~
來看代碼:
font屬性
api接口:
關于QFont這個類,里面包含了這個字體信息,包含字體大小,粗細,斜體,下劃線,刪除線等等:
當然,這些字體信息也是能夠在控件屬性中通過圖形化界面的方式來修改的,也可以通過代碼的方式。
我們直接來通過代碼的形式:
結語
今天的內容分享到這里,不足之處歡迎大家留言指出,感謝大家支持!!
旦旦而學之,久而不怠焉,迄乎成,而亦不知其昏與庸也!!