Qt5+VS2015編程實例:數值進制轉換小工具

搞硬件開發的小夥伴們,對於數值不同進制之間的轉換是經常用到的一個小功能,如輸入一個十進制整數,要求能夠迅速得到其二進制、十六進制的數值等。

在這篇文章中,給大家演示下如何使用Qt5.9界面庫,在VS2015的IDE編程環境中,通過代碼來簡單實現這樣的一個小工具例子吧。

1、實例說明

軟件運行界面如圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

軟件主界面包括左右兩部分,左邊是一個工具欄,右邊是主顯示窗口,通過在工具欄中選擇不同的選項,在主窗口顯示相應的內容,下方是一個狀態欄。本例較為簡單,在工具欄上僅有三個選項,點擊“退出程序”按鈕時退出整個程序,點擊“歡迎使用”按鈕時顯示數值進制轉換的操作窗口,點擊“軟件說明”按鈕時則顯示軟件的輔助說明信息,如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

下面說下這個例子的詳細編程步驟。

2、實例實現過程

(1) 創建Qt項目工程

打開Visual Sudio 2015,選擇文件菜單,新建一個的Qt項目,項目類型選擇Qt GUI Application,入項目名稱為MyDemo。

項目創建完畢後,在方案資源管理器中雙擊“MyWnd.ui”,自動在Qt設計師中打開該界面文件,編輯完成後的主界面如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

該界面中的對象及佈局情況如下圖所示,主窗口MyWnd其基類為QMainWindow,主窗口上包括中心部件(centralWidget)、工具欄(mainToolBar)及狀態欄(statasBar)三部分。

Qt5+VS2015編程實例:數值進制轉換小工具

其中,中心部件(centralWidget)使用垂直佈局,上面為一QLabel部件,下面為一QStackedWidget部件,在QStackedWidget部件中創建兩個頁面,分別顯示主操作頁面及軟件說明頁面。兩個頁面(page及page_2)的部件及佈局情況從上圖中可以清晰的看出來。

工具欄上放置三個按鈕,其功能可由動作編輯器中實現,如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

需要的圖標資源可在資源瀏覽器中編輯完成,如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

退出按鈕的功能直接在信號與槽編輯器中完成,如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

(3) 代碼功能實現

本例主要實現工具欄上兩個按鈕的切換功能(顯示不同的頁面)及當輸入數值改變時實現實時進制轉換功能,因此在“MyWnd.h”頭文件中,在“private slots:”區域定義了兩個槽函數分別響應這兩個事件,另外,自定義了兩個字符串類型的私有變量“curNumVal”和“ curNumType”分別保存當前界面上輸入的數值及當前數值的類型,自定義了一個私有函數“getResult()”做進制轉換功能的實現,如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

在實現文件MyWnd.cpp”中,添加信號與槽函數的關聯及槽函數的具體功能實現。

其中,在構造函數中代碼如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

上面代碼中主要完成的功能為:變量初始化(11、12行)、工具欄上按鈕的互斥設置(14-16行)、狀態欄提示信息設置(17行)、數值輸入的兩個控件的動態屬性設置(18、19行,在槽函數中用來區分事件源)及槽函數的關聯(21-26行)。

函數具體實現代碼如下圖所示:

Qt5+VS2015編程實例:數值進制轉換小工具

代碼簡要解釋如下:

第29-34行,當點擊工具欄不同按鈕時實現主顯示窗口的頁面切換。

第36-43行,當改變數值的值或類型時實現實時進制轉換功能,這兒用到了這兩個控件的動態屬性,用以區分當前哪個控件產生了事件。

第45-71行,數值不同進制的具體轉換功能實現,並在文本框窗口上進行顯示。這兒用到了比較靈活的QMap類,用以存儲當前的進制名稱及數值,使用QString類的toInt及setNum函數進行字符串與數值進制之間的轉換。其中第65-70行使用foreach對map元素進行索引,分別轉換為不同的進制,這段代碼也可改寫為下面的形式,實現同樣的功能:

Qt5+VS2015編程實例:數值進制轉換小工具

至此,項目功能就完成了,編譯運行程序,在主界面上實時改變當前輸入的數值或當前數值的類型,都會在顯示窗口實時顯示出當前數值的其它進制值。

3、總結

這個例子比較小巧簡單,但涉及的內容還是比較多,如Qt的設計師的使用、工具欄/狀態欄的使用、數值與字符串之間的轉換、多個控制關聯一個槽函數的方法等內容。

大家加關注並私信回覆:qt023,可獲取該工程的源代碼下載。


分享到:


相關文章: