Qt解析原理

2021-09-26 21:44:06 字數 4501 閱讀 6882

1、qt是什麼

圖形使用者程式框架,是對底層應用程式設計介面api物件導向的封裝。

是一套基於c++語言的類庫,專注但不侷限於圖形使用者介面的開發,也可以進行系統呼叫、網路程式設計、資料庫、2d/3d圖形處理。

特點:跨平台,支援linux,windows、macos、ios、android等作業系統。

2、為什麼選擇qt

基於c++語言,簡單、易用、物件導向(針對gtk)

優良的跨平台特性(針對mfc),工控、嵌入式

1、工具

qt構建器:他負責對原始檔、標頭檔案、介面檔案進行解析生成編譯指令碼。

qmake -project 根據當前目錄裡的檔案,生成專案配置檔案,***.pro

qmake 根據***.pro檔案生成makefile指令碼

qt設計師:對於帶介面應用程式來說,最純粹的方式是通過c/c++**來編寫整個專案,但這種方式費時又費力,所以我們一般不這樣做介面,而採用一種畫圖的方式,自動生成對應的**,所見即所得。

qt介面編譯器:它負責把qt設計師設計出的介面檔案編譯成c++**。

uic ***.ui -o ***.h 把介面檔案編譯成c++類。

2、標頭檔案和庫

qt安裝好之後會在安裝目錄下建立乙個/usr/include/qt4目錄,我們所使用的標頭檔案都在這個目錄下。

共享庫安裝在/usr/lib/i386-linux-gnu/qt4和/usr/lib/qt4目錄下。

1、hello,qt。

編譯源**

生成專案檔案:qmake -project -> hello.pro

生成編譯指令碼:qmake ->makefile

編譯:make

執行:./hello

2、幫助手冊

public types:訪問許可權是 public 的成員。

properties:訪問許可權是 private 這一類的成員都get/set函式。

public functions:訪問許可權是 public 的成員函式。

public slots:訪問許可權是 public 的槽函式,它可以像成員函式一樣使用,但它可以與訊號連線(與signal函式繫結乙個訊號與函式一樣),區別是qt的訊號可以自定義。

signals:訊號,注意:不是函式,通過emit傳送,會自動執行與它連線的槽函式。

static public members:靜態公有成員函式,這類函式與物件無關,管理的物件的公共資源。

protected functions:訪問許可權是 protected 的成員函式

detailed description:對本類的詳細說明,使用方法,呼叫的上下文注意事項,有些類會有使用dome。

注意:在qt4.8中預設不支援 utf-8 字元編碼,因此使用中文時會出現亂碼。

內部編碼與外部編碼:

qt的應用程式的控制項內部所使用的都utf-16,這叫做應用程式的內部編碼,而我們通過終端,控制輸入的字串叫外部編碼。

qtextcodec *codec = qtextcodec::codecforname("utf-8");

// 告訴qt本地系統字元編碼

qtextcodec::setcodecforlocale(codec);

// 告訴qt程式中所使用的字串的字元編碼

qtextcodec::setcodecforcstrings(codec);

// 告訴qt外部的字元編譯

qtextcodec::setcodecfortr(codec);

1、訊號

當使用者或系統觸發乙個動作,導致某個視窗發生變化,該控制項就會發射乙個訊號,訊號就可以呼叫乙個函式,必須時還可以附加引數。

如:qpushbutton 控制項中就有 clicked(void) 訊號。

2、槽槽就乙個普通的類成員函式,它可以是公有的、私有的、保護護的,可以被過載也可以被覆蓋,其引數、返回值可以是任意型別,可以被直接呼叫。

與普通函式的區別就是它可以被訊號觸發,自動執行。

如:視窗控制項qwidget中預設就有 close(void) 槽函式。

3、訊號和槽的連線

注意:qobject是qt中所有類的父類

bool qobject::connect (

const qobject * sender, // 訊號傳送者

const char * signal, // 訊號簽名字串,複製或使用自動提示

const qobject * receiver, // 訊號的接收者

const char * method); // 槽函式簽名字串,複製或使用自動提示

signal() 將訊號函式簽名轉換成字串

slot() 將槽函式簽名轉換成字串

從心上案例中可以看出,乙個控制就乙個視窗,要相把所有控制項集合在同乙個視窗中,那麼就需要把這些控制項束縛在同乙個容器中,這種容器就叫視窗容器。

1、qmanwindow

主視窗容器,通常由標題欄、選單欄、工具條、狀態列以及**顯示區組成。 2、qdialog

對話方塊視窗容器,管理多個不同的互動式控制項。

3、qwidget

純粹的視窗容器,它是qmanwindow和qdialog父類。

常用的設定有:

resize(w,h) 設定視窗的大小

move(x,y) 設定視窗的位置

建立控制項時把容器物件的位址給控制,就可以把控制項放入到容器中。

1、開啟qt創造器

在終端執行:qtcreator,右鍵鎖定到啟動器。

2、建立專案

檔案->新建檔案或工程->qt控制項專案->qt gui應用->填寫專案名稱(不要使用中文)->桌面->選擇視窗容器->設定類名、頭檔名、源檔名->選擇是否建立介面檔案(設定介面檔名)。

3、視窗類的構成:

mainwindow.ui 檔案會自動生成 ui_mainwindow.h(在qt創造器中不可見)。

ui_mainwindow.h 標頭檔案中會自動生成 ui_mainwindow類,該類中會包含所有mainwindow.ui檔案中所畫的控制項。

在ui_mainwindow.h標頭檔案中會在ui名字空間中自動建立mainwindo類,ui_mainwindow會被mainwindow類繼承。

mainwindow.h標頭檔案中會自動建立mainwindow類,預設繼承qmainwindow,會乙個預設的成員ui::mainwindow *ui,它裡面有所o介面檔案中的控制項。

qlabel:標籤控制項,用來顯示簡單的文字,在介面上唯讀的

settext 設定顯示內容

text 獲取標籤上的字串,返回值是qstring

qpushbutton:按鈕控制項

同樣具有settext、text

重要的功能是 單擊訊號 clicked(),也有雙擊、懸停、按下、彈起訊號。

qradiobutton:單選按鍵,同視窗下只能有乙個被選中

重要功能是選中和取消選中訊號

qlineedit:單行輸入文字框

常用操作是獲取它的輸入內容

qtextedit:多行輸入文字框

常用於輸入大段檔案,輸入的內容可以換行,自帶滾動條。

qcombobox:下拉輸入框

它輸入的內容只能通過下接按鍵選擇,只防止使用者輸入錯誤常用解決方法。

qtextbrower:多行文字顯示,支援富文字顯示。

在介面上是唯讀的,文字可以設定字型大小,字型,顏色,加粗,對齊等操作。

qgroupbox:分組框,可以放入乙個控制統一管理。

最常用的是放入qradiobutton按鈕,一組的按鈕只能有乙個被選中。

q***silder:滑塊

有水平、垂直滑塊,也可以當進行條使用。

qspinbox:數字滑塊

與silder的用法基本一致,只它是以數字顯示。

silder的spinbox主要操作是:初值、最大值、進步值

即可以用來顯示,也可以用來設定。

快捷鍵:

alt+0:顯示/隱藏側邊欄

ctrl+e 鬆開後按0:刪除所有的分割視窗

ctrl+e 鬆開後按1:刪除當的分割視窗

ctrl+e 鬆開後安2:水平分割視窗

ctrl+e 鬆開後安3:垂直分割視窗

ctrl+b+s:儲存所有檔案並編譯執行

ctrl+b:編譯執行

ctrl+r:執行專案

ctrl+/:注釋/取消注釋

ctrl+i:自動縮排選中的**

ctrl+shift+r:批量修改變數名

ctrl+f:搜尋、替換

ctrl+單擊:跳轉到定義位置

shift+f2:宣告與定義之間進行切換

alt+shift+u:小寫轉換成大寫

alt+u:大寫轉換成小寫

f1:游標定位類或物件上,開啟對類的幫助手冊

f4:標頭檔案與原始檔之間快速切換

QT原始碼解析 四)剖析Qt的事件機制原理

qt原始碼解析 一 qt建立視窗程式 訊息迴圈和winmain函式 qt原始碼解析 二 深入剖析qt元物件系統和訊號槽機制 qt原始碼解析 三 深入剖析qt元物件系統和訊號槽機制 續 qt原始碼解析 四 剖析qt的事件機制原理 qt原始碼解析 五 qlibrary跨平台呼叫動態庫的實現 qt原始碼解...

qt事件原理

若對c 語法不熟悉,建議參閱 c 語法詳解 一書,電子工業出版社出版,該書語法示例短小精悍,對查閱c 知識點相當方便,並對語法原理進行了透徹 深入詳細的講解,可確保讀者徹底弄懂c 的原理,徹底解惑c 使其知其然更知其所以然。此書是一本全面了解c 不可多得的案頭必備圖書。2.6.2 qt對事件的描述及...

解析Qt內省機制

所謂內省是指物件導向語言的一種在執行期間查詢物件資訊的能力,比如如果該語具有執行期間檢查物件型別的能力,那麼我們稱它是型別內省 type intropection 的,型別內省可以用來實施多型。c 的內省比較有限,它僅支援上面所說的型別內省,c 的型別內省是通過執行時型別識別 rtti run ti...