Qt,從控件的一個綜合性例子開始

前言

在安裝好Qt的開發環境後,開始學習Qt的字符串(QString)、容器類(QList,QLinkedList,QVector,QMap,QHash…)、各類控件。具體的使用屬於基礎知識,本文通過一個綜合性的例子對其中比較重要和有趣的部分進行探討,另外還有一個QString的隱式共享問題。
源碼@github:https://github.com/LeeHDsniper/LearnQt/tree/master/CH210

程序運行效果

知識點

界面確實很簡單,但是其中所涉及到的知識點都比較重要:
1. 使用Qt Creater的designer進行佈局
2. 夥伴模式
3. 水平佈局、垂直佈局
4. 按鈕的幾個特性

Qt Creater 的designer

圖形話的界面編輯器確實帶給了我們許多方便,在C#的開發中,一直不會脫離圖形界面的設計模式,但是有一個好處是在圖形界面的所有編輯操作,最後都會轉換爲代碼形式,也就是說可以在代碼上看到做出的改變。但是QtCreater的designer模式下,所做的改變不會出現再代碼上,只會對ui的XML文件進行改寫。所以還是儘量使用手寫代碼的模式進行開發比較好。

這個實例中用到了上圖界面上方的第三個按鈕(夥伴模式)和第六個按鈕(水平佈局)。
Designer的其他使用方法和大部分圖形界面設計器一樣,處理夥伴模式和佈局等不同點,至於各類控件的屬性修改、事件“註冊”都相同。

佈局

Qt提供了水平排列布局、垂直排列布局和網格排列布局。
垂直排列布局:
| Lable1 |
| Button1 |
| Button2 |
上述三個控件就是水平佈局
水平排列布局:
| Lable1 | Button2 | Button3 |
上述三個控件就是垂直佈局
三種佈局的使用將在後面詳細解釋。

按鈕的幾個特性


  1. default
    default是QPushButton的屬性之一,如果default設爲 true,那麼當用戶按下enter鍵,對應的就相當於按下default設爲true的鍵,這個屬性的使用有一些限制。

This property holds whether the push button is the default button.
Default and autodefault buttons decide what happens when the user presses enter in a dialog.
——[Qt官方文檔]
2.enable
設置按鈕是否可以按下(觸發click信號)

隱式共享

隱式共享又稱爲回寫複製(copy on write),當兩個對象共享一份數據時(通過淺拷貝實現數據塊的共享),如果數據不改變,則不進行數據的複製;而當某個對象需要需要改變數據時,則執行深拷貝。
淺拷貝:複製對象的一個引用
深拷貝:生成對象的一個完整複製品
隱式共享會維護一個指向對象的指針,以及在對象中維護一個引用計數器。
例如:

QString str1="hello";
QString str2=str1;

那麼在str1中的引用計數器就會置爲2,而且str2實際上只是str1的一個引用。
再例如:

......
str2[0]='e';

那麼str2就會成爲str1的一個完成複製,str1和str2的引用計數器都會置爲1。

下一節將講述Qt5的佈局管理之分割窗口

發佈了25 篇原創文章 · 獲贊 20 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章