在之前的學習中我們學習了標籤元件和按鈕元件,標籤用來顯示乙個字串,帶有提示性作用,在使用它時需要將標籤物件和父元件繫結在一起;按鈕元件也是乙個功能性元件,需要父元件作為容器,它的的作用就是當你按下這個按鈕時會觸發某個操作,和標籤元件一樣,它們都能在父元件中定位。
在今天的開發中需要用到另一種元件,就是qlineedit文字框,它用來接收使用者的輸入、獲取字串並顯示出來,和qlabel、qpushbutton一樣,文字框qlineedit也是功能性元件,需要父元件作為容器並能夠在父元件上定位。
qwidget w;//定義父元件
qlineedit edit(&w);//關聯容器
edit.setalignment(qt::alignright);//設定資料顯示的對齊方式
edit.move(10, 10);//在父元件中定位
edit.resize(200, 30);//文字框寬200,高30
學習了文字框元件後今天的主題就來了,通過構建乙個簡單的計算器介面來鞏固學習的各種元件。其最終成型後的樣子如下圖:
看起來也不複雜,qwidget物件作為整個介面的父元件,裡面包含乙個qlineedit文字框和20個顯示著不同內容的qpushbutton按鈕,所有功能元件之間依靠座標系統進行絕對定位。
在正式程式設計之前需要將介面的元件元素的尺寸和元件之間的間隔設計出來。如下圖:
接下來就是實戰了,在介面中我們需要乙個qlineedit物件和20個按鈕物件,並且每個按鈕的顯示內容也不同,為了避免大量重複的定義按鈕物件和設定顯示文字,我們申請兩個指標陣列,qpushbutton* button[0]用來儲存按鈕物件,const char* btntext[20]用來儲存顯示到按鈕上的字串。並通過兩層for迴圈將它們定位。
qwidget* w = new qwidget(null, qt::windowclosebuttonhint);//其中計算器程式介面不需要最大化和最小化按鈕
qlineedit* le = new qlineedit(w);
qpushbutton* button[20] = ;
const char* btntext[20] =//按照介面順序賦值
;le->move(10, 10);
le->resize(240, 30);
le->setreadonly(true);//文字框不能進行編輯
for(int i=0; i<4; i++)
}w->show();
w->setfixedsize(w->width(), w->height());//固定qwidget視窗大小
}
**片段主要就是乙個兩層for迴圈,在迴圈中對每行每列的按鈕進行建立和定位,這依賴於之前對介面的設計。
有人會說在程式裡的一些細節處理所需要的函式是怎麼知道的,其實就是善於利用幫助文件,通過文件可以檢視某個類的所有成員和函式,及它們的功能。
介面**已經已完成了,那麼在windows上跑起來會是個什麼樣子呢?
由於是在windows上進行編譯的,所以它會採用windows的介面風格。
由於qt是跨平台的,那麼在不同系統下對同乙個qt程式進行編譯後呈現出來的介面風格就和當前作業系統的風格一致。
再提乙個問題,大家有發現**中有new關鍵字卻沒有delete嗎?這是為什麼,既然提到了就肯定不會是忘記了,那是什麼情況呢?
提前告訴大家,這是因為qt物件採用物件樹的方式管理應用程式中的qt物件,簡單來說就是qt存在某種機制使得我們申請的動態資源在不主動釋放的情況下不會導致記憶體洩漏!!!這種機制就是物件樹具體細節我們後面再討論。
QT 計算器的簡單實現
轉換為字尾表示式,實現最主要功能 3void mainwindow topostfix 415 if j tmp.size 19postfix.clear 2021 for int i 0 i exp.size i 2227 else if exp i 30else if exp i 39 opst...
QT 計算器的簡單實現
轉換為字尾表示式,實現最主要功能 3void mainwindow topostfix 415 if j tmp.size 19postfix.clear 2021 for int i 0 i exp.size i 2227 else if exp i 30else if exp i 39 opst...
基於Qt的簡單計算器
介面 ui由qtdesign中託控制項形成。ifndef widget h define widget h include include include myoperator.h namespace ui class widget public qwidget 表示第乙個數字還是第二個數字 enu...