文章目錄
- qt常用控件
- label
- LCD Number
- ProgressBar
- 結語
很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!!
今天我們進一步c++11中常見的新增表達
作者:?( ‘ω’ )?260
我的專欄:qt,Linux,C++進階,C++初階,數據結構初階,題海探驪,c語言
歡迎點贊,關注!!
qt常用控件
label
在上篇文章我們已經講解了label中的PixMap屬性和scaledContents屬性,
這里先創建4個label并給這些label設置好對應的邊框,分別對于不同屬性進行驗證:
對齊方式:
水平垂直方向居中對齊:
如果我想同時具有這兩個屬性呢?
這里就不是跟跟設置快捷鍵的方式一樣直接使用 + 了,這里需要使用按位或(|),來看:
那這里為什么是使用|呢?為什么不使用按位與呢?來看底層:
我們將常用的屬性轉換成二進制來看:
轉換成二進制之后,當們如果想使用多種屬性結合的話,使用按位或就能夠同時將屬于該兩個位置的標記位設置成1(見1為1),這種設計方式頗具位圖的思想了
自動換行:
我們來設置自動換行屬性:
縮進:
這里我們設置縮進傳遞的參數是一個整形,代碼前方縮進多少個像素。
細節:這里的縮進也會使換行的文本縮進,即label中的所有文本都會縮進,不同于css,label-indent只有第一行會縮進
邊距:
這里我們主要來測試margine,indent只有兩個方向上會縮進,但是margine會四個方向縮進:
label設置伙伴:
我們使用checkbox,當我們選擇這個label的時候,此時這個checkbox也會被選擇:
來看代碼:
我們構建項目,會發現此時label都點擊不了,但是我們可以使用快捷鍵對其進行點擊:按下alt + a或者alt + b就能夠對文本進行點擊。此時建立伙伴關系的單選,復選按鈕就會被點擊:
注意:label的快捷鍵和PushButton的快捷鍵相差較大:前者文本必須設置&一個字母,使用快捷鍵必須使用alt + 該字母,而且,只能寫一個字母,但是PushButton的快捷鍵就會比較寬松了
LCD Number
這個屬性主要是用來顯示數字和對數字進行操作~~
先來看api接口:
其實上面最重要的就是使用純代碼的形式設計數字不是使用setXXX,而是使用display接口,這里需要注意。
這里我們寫一個關于計時器的案例:來看代碼:
首先,我們來思考,既然是計時器,那么QLCDNumber顯示的時間肯定是需要周期性的變化的,即每秒鐘value數值需要減1。在qt中,有一個內置的類QTimer中有一個timeout信號,能夠完成這樣的周期性的操作
細節:使用QTimer時,肯定是需要先建立信號與槽的連接,隨后再來開啟定時器,而且,在槽函數中需要手動關閉定時器,所以應該創建一個QTimer的成員變量
為什么需要關閉定時器呢?因為不關閉定時器,一直執行周期性的動作,當數值減到0,此時計時器就會變成負數~~
我們先來看示例:
來看結果:
我們發現確實是每隔一秒,打印了一次日志,我們來完善槽函數
這樣我們就實現了一個定時器功能了
我們再來想,能不能還有其他方式來設置定時器呢?比如:先睡眠一秒,隨后再來修改顯示屏上的數字。
首先,在qt中沒有Sleep這個函數,Sleep是windows提供的api接口,vs是使用msvc編譯器,所以可以使用windows提供的接口,但是qt使用的是Mingw編譯器,但是在c++11中提供了sleep_for接口,也能實現和Sleep中類似的效果:
我們來看一下這個代碼:
這里我們不重點看語法,因為我們linux線程還沒有講解:
我們來運行程序:
我們發現這次運行的時間比上次運行的時間更久,最后界面彈出來計時器時間直接為0了:
這個是什么原因呢?
我們來看,我們的休眠是在Widget的構造函數中執行的,即只有我們退出循環,此時構造函數才能夠結束,而且我們界面的展示是在構造函數完成之后再來進行展示的,即其實計時器在正常工作,只是界面沒有打印出來:
那我們如何解決呢?
我們再來創建一個新的線程,在新的線程中我們來完成休眠操作,這是界面就能夠來顯示了:
在構造函數中,我們創建了一個線程,創建了一個線程之后,構造函數就繼續向下執行,隨后就能夠展示界面了。
來看結果:
我們發現程序異常終止了,這個是什么原因呢?
結論:在qt中,只能夠由主線程(main函數)去修改Widget界面的內容,如果使用其他線程去修改界面的內容,程序就會直接終止,并且,信號與槽默認就是在主線程中進行調用的~~
所以,如果需要執行周期性的操作,還是推薦使用QTimer這個類中的timeout信號,別忘了打開和關閉定時器,而且需要掛到對象樹上~~
ProgressBar
作用:告訴用戶需要等待~~
api接口:
我先前面學習了QTimer來來執行周期性的執行同一個操作,那我們可以使用QTimer和ProgressBar結合,來慢慢增大這個進度條。
來看代碼:
來看結果:
此時進度條就會慢慢的從0增長至100了~~
結語
今天的內容就分享到這里,不足之處歡迎留言之指出,感謝大家支持!!
鍥而舍之,朽木不折;鍥而不舍,金石可鏤!!