比價(jià)網(wǎng)站怎么做外貿(mào)seo軟文發(fā)布平臺(tái)
常用控件
- 一.Lable
- 二.LCD Number
一.Lable
QLabel 可以?來顯??本和圖?.
代碼?例:顯?不同格式的?本
代碼?例:顯?圖?
此時(shí),如果拖動(dòng)窗???,可以看到圖?并不會(huì)隨著窗???的改變?同步變化
為了解決這個(gè)問題,可以在Widget中重寫resizeEvent函數(shù)。當(dāng)用戶把窗口從A拖到B時(shí),就會(huì)觸發(fā)連續(xù)的一系列的resizeEvent。
此處的 resizeEvent 函數(shù)我們沒有?動(dòng)調(diào)?,但是能在窗???變化時(shí)被?動(dòng)調(diào)?.
這個(gè)過程就是依賴C++中的多態(tài)來實(shí)現(xiàn)的.Qt框架內(nèi)部管理著QWidget對(duì)象表?咱們的窗?.在窗???發(fā)?改變時(shí),Qt就會(huì)?動(dòng)調(diào)? resizeEvent 函數(shù).
但是由于實(shí)際上這個(gè)表?窗?的并?是QWidget,?是QWidget的?類,也就是咱們??寫的Widget.此時(shí)雖然是通過?類調(diào)?函數(shù),但是實(shí)際上執(zhí)?的是?類的函數(shù)(也就是我們重寫后的resizeEvent ).此處屬于是多態(tài)機(jī)制的?種經(jīng)典?法.通過上述過程,就可以把?定義的代碼,插?到框架內(nèi)部執(zhí)?.相當(dāng)于"注冊(cè)回調(diào)函數(shù)"。
代碼?例:?本對(duì)?,?動(dòng)換?,縮進(jìn),邊距
QFrame 是 QLabel 的?類.其中 frameShape 屬性?來設(shè)置邊框性質(zhì).
QFrame::Box :矩形邊框
QFrame::Panel :帶有可點(diǎn)擊區(qū)域的?板邊框
QFrame::WinPanel :Windows?格的邊框
QFrame::HLine :?平線邊框
QFrame::VLine :垂直線邊框
QFrame::StyledPanel :帶有可點(diǎn)擊區(qū)域的?板邊框,但樣式取決于窗?主題
代碼?例:設(shè)置伙伴
Qt 中, QLabel中寫的文本,是可以指定"快捷鍵"此處快捷鍵的規(guī)則功能上要比QPushButton弱很多.是在文本中使用&跟上一個(gè)字符來表示快捷鍵。比如&A=>通過鍵盤上的 alt + a來觸發(fā)這個(gè)快捷鍵.&B=>通過鍵盤上的 alt + b來觸發(fā)。綁定了伙伴關(guān)系之后,通過快捷鍵就可以選中對(duì)應(yīng)的單選按鈕/復(fù)選按鈕
此處把label中的?本設(shè)置為"快捷鍵&A"這樣的形式.其中&后?跟著的字符,就是快捷鍵.可以通過alt+A的?式來觸發(fā)該快捷鍵
但是注意,這?的快捷鍵和 QPushButton 的不同.需要搭配alt和單個(gè)字?的?式才能觸發(fā).
二.LCD Number
QLCDNumer 是?個(gè)專??來顯?數(shù)字的控件.類似于"?式計(jì)算器"的效果.
代碼?例:倒計(jì)時(shí)
QTimer 表?定時(shí)器.通過 start ?法啟動(dòng)定時(shí)器之后,就會(huì)每隔?定周期,觸發(fā)?次QTimer::timeout 信號(hào).
使? connect 把 QTimer::timeout 信號(hào)和 Widget::updateTime 連接起來,意味著每次觸發(fā)QTimer::timeout 都會(huì)執(zhí)? Widget::updateTime
-
上述代碼如果直接在Widget構(gòu)造函數(shù)中,通過?個(gè)循環(huán)+sleep的?式是否可以呢?顯然,這個(gè)代碼是不?的.循環(huán)會(huì)使Widget的構(gòu)造函數(shù)?法執(zhí)?完畢,此時(shí)界?是不能正確構(gòu)造和顯?的.
-
上述代碼如果是在Widget構(gòu)造函數(shù)中,另起?個(gè)線程,在新線程中完成循環(huán)+sleep是否可以呢?這個(gè)代碼同樣是不?的.Qt中規(guī)定,任何對(duì)于GUI上內(nèi)容的操作,必須在主線程中完成.像Widget構(gòu)造函數(shù),以及connect連接的slot函數(shù),都是在主線程中調(diào)?的.?我們??創(chuàng)建的線程則不是.當(dāng)我們??的線程中嘗試對(duì)界?元素進(jìn)?修改時(shí),Qt程序往往會(huì)直接崩潰.
這樣的約定主要是因?yàn)镚UI中的狀態(tài)往往是牽?發(fā)動(dòng)全?的,修改?個(gè)地?,就需要同步的對(duì)其他內(nèi)容進(jìn)?調(diào)整.?如調(diào)整了某個(gè)元素的尺?,就可能影響到內(nèi)部的?字位置,或者其他元素的位置.這??連串的修改,都是需要按照?定的順序來完成的.由于多線程執(zhí)?的順序?法保障,因此Qt從根本上禁?了其他線程修改GUI狀態(tài),避免后續(xù)的?系列問題