目錄
1 -> Qt Hello World 程序
1.1 -> 使用“按鈕”實現
1.1.1 -> 純代碼方式實現
1.1.2 -> 可視化操作實現
1.2 -> 使用“標簽”實現
1.2.1 -> 純代碼方式實現
1.2.2 -> 可視化操作實現
2 -> 項目文件解析
2.1 -> .pro文件解析
2.2 -> widget.h文件解析?
2.3 -> main.cpp文件解析
2.4 -> widget.cpp文件解析
2.5 -> widget.ui文件解析
3 -> Qt 編程注意事項
3.1 -> Qt 中的命名規范
3.2 -> Qt Creator 中的快捷鍵
3.3 -> 使用幫助文檔
3.4 -> 認識對象模型(對象樹)
3.5 -> Qt 窗口坐標體系
1 -> Qt Hello World 程序
1.1 -> 使用“按鈕”實現
1.1.1 -> 純代碼方式實現
實現效果如下:
1.1.2 -> 可視化操作實現
1. 雙擊“widget.ui”文件
2. 拖拽控件至ui界面窗口并修改內容
3. 構建并運行,實現效果如下:
1.2 -> 使用“標簽”實現
1.2.1 -> 純代碼方式實現
實現效果:
1.2.2 -> 可視化操作實現
1. 雙擊“widget.ui”文件
2. 拖拽“標簽”至ui設計界面中,并雙擊修改標簽內容
3. 實現效果如下
2 -> 項目文件解析
2.1 -> .pro文件解析
- app:建立?個應?程序的 makefile。這是默認值,所以如果模板沒有被指定,這個將被使 用。
- lib :建立?個庫的 makefile。
- vcapp:建立?個應用程序的 VisualStudio 項目文件。
- ?vclib: 建立?個庫的 VisualStudio 項目文件。
- subdirs:這是?個特殊的模板,它可以創建?個能夠進?特定目錄的 makefile 并且為它調用make 的 makefile。
2.2 -> widget.h文件解析?
2.3 -> main.cpp文件解析
使用Qt Creator新建任意工程之后,main.cpp文件中都會自動生成如下代碼:
解釋:
- QApplication 管理圖形用戶界面應用程序的控制流和主要設置。
- QApplication 是 Qt 的整個后臺管理的命脈。它包含主事件循環,在其中來自窗口系統和其它 資源的所有事件處理和調度。它也處理應用程序的初始化和結束,并且提供對話管理。
- 對于任何?個使用 Qt 的圖形用戶界面應用程序,都正好存在?個 QApplication 對象,而不論 這個應用程序在同?時間內是不是有 0、1、2 或更多個窗?。
2.4 -> widget.cpp文件解析
widget.cpp 文件是類 Widget 的實現代碼,所有的窗體上要實現的功能添加在此文件中
2.5 -> widget.ui文件解析
3 -> Qt 編程注意事項
3.1 -> Qt 中的命名規范
- 類名:首字母大寫,單詞和單詞之間的首字母大寫
- 函數名及變量名:首字母小寫,單詞和單詞之間首字母大寫
Qt 偏好駝峰命名法,這點不同于C/C++偏好蛇形命名法。
3.2 -> Qt Creator 中的快捷鍵
- 注釋:ctrl + /
- 運行:ctrl + R
- 編譯:ctrl + B
- 字體縮放:ctrl + 鼠標滾輪
- 查找:ctrl + F
- 整行移動:ctrl + shift +??/?
- 幫助文檔:F1
- 自動對齊:ctrl + i
- 同名之間的 .h 和 .cpp 的切換:F4
- 生成函數聲明的對應定義:alt + enter
3.3 -> 使用幫助文檔
打開幫助文檔有三種方式,實際編程中使用哪種都行。
1. 光標要放到要查詢的類名/方法名上,直接按F1
2. Qt Creator 左側邊欄中直接用鼠標單擊“幫助”按鈕
點擊“幫助”之后,出現如下界面:
3. 找到 Qt Creator 的安裝路徑,在“bin”文件夾下找到 assistant.exe,雙擊打開
使用示例
1. 新建項目,在新建項目中使用 Qt 中的“QPushButton”控件
2. 打開幫助手冊,在“索引”里面輸入“QPushButton”
3.4 -> 認識對象模型(對象樹)
- 當創建?個 QObject 對象時,會看到 QObject 的構造函數接收?個 QObject 指針作為參數,這個參數就是 parent,也就是?對象指針。
- 這相當于,在創建 QObject 對象時,可以提供?個其?對象,我們創建的這個 QObject 對象會?動添加到其?對象的 children() 列表。
- 當?對象析構的時候,這個列表中的所有對象也會被析構。(注意,這?的?對象并不是繼承意義上的?類!)
這種機制在 GUI 程序設計中相當有?。例如,?個按鈕有?個 QShortcut(快捷鍵)對象作為其 ?對象。當刪除按鈕的時候,這個快捷鍵理應被刪除。這是合理的。
- QWidget 繼承? QObject ,因此也繼承了這種對象樹關系。?個孩??動地成為?組件的? 個?組件。因此,它會顯?在?組件的坐標系統中,被?組件的邊界剪裁。例如,當??關閉 ?個對話框的時候,應?程序將其刪除,那么,我們希望屬于這個對話框的按鈕、圖標等應該 ?起被刪除。事實就是如此,因為這些都是對話框的?組件。
- 當然,我們也可以??刪除?對象,它們會?動從其?對象列表中刪除。?如,當我們刪除了 ?個?具欄時,其所在的主窗?會?動將該?具欄從其?對象列表中刪除,并且?動調整屏幕 顯?。
Qt 引?對象樹的概念,在?定程度上解決了內存問題。
- 當?個 QObject 對象在堆上創建的時候,Qt 會同時為其創建?個對象樹。不過,對象樹中對象的 順序是沒有定義的。這意味著,銷毀這些對象的順序也是未定義的。
- 任何對象樹中的 QObject 對象 delete 的時候,如果這個對象有 parent,則?動將其從 parent 的 children() 列表中刪除;如果有孩?,則?動 delete 每?個孩?。Qt 保證沒有 QObject 會被 delete 兩次,這是由析構順序決定的。
在Qt中,盡量在構造的時候就指定 parent 對象,并且大膽在堆上創建。
Qt 對象樹如圖
代碼示例
1. 創建一個新工程并編譯運行,生成如下窗口
2. 選中工程名,鼠標右鍵 => “add new……”(或者“添加新文件”)
3. 選擇“choose……”,彈出如下界面
4. 點擊“下一步”,彈出如下對話框
5. 點擊“完成”之后,手動創建類的頭文件以及源文件會自動添加到目標工程中
6. 修改頭文件
7. 編寫源文件
8. 編譯并運行
9. 當關閉彈出的對話框時,就會自動調用按鈕的析構函數
10. 觀察析構函數的執行順序
11. 執行結果
12. 執行結果分析
對象樹確保的是先釋放子節點的內存,后釋放父節點的內存。
而析構函數的調用順序則不一定遵守上述要求,因此看到子節點的析構執行順序反而在父節點析構順序之后。
注意:
調用析構函數和釋放內存并非是同一件事情。
3.5 -> Qt 窗口坐標體系
坐標體系:以左上角為原點(0,0),X?向右增加,Y 向下增加。
對于嵌套窗口,其坐標是相對于父窗口來說的。
示例:使用 Qt 中的坐標系設置控件的位置。
運行結果如下:
感謝各位大佬支持!!!
互三啦!!!