

摘要:在工程建設過程當中,有時需要使用許多數學公式計算出相應的數據,然而有一些數學公式計算起來比較麻煩,同時可以使用軟件開發工具編寫相應的軟件來解決這個問題。使用Qt即可以可視化編寫軟件,也可以純代碼編寫。為明了編寫軟件過程中所用思想、處理過程、操作方法,該文舉例介紹使用純代碼編寫軟件。首先在Qt的安裝目錄下新建一文件夾,再在此目錄下新建四個文本文件,編寫相應代碼后重命名文本文件為頭文件或者C++文件,然后在命令行輸入命令,最后生成相應的軟件。
關鍵詞:Qt;純代碼;編寫軟件;實例
中圖分類號:TP311.5 文獻標識碼:A
文章編號:1009-3044(2020)27-0072-03
開放科學(資源服務)標識碼(OSID):
Qt是1994年成立的總部位于挪威奧斯陸的奇趣科技公司(Trolltech)提供的跨平臺C++圖形界面應用程序開發框架[1]。它最初由Haavard Nord(Trolltech的CEO)和Eirik chambe-Eng(Trolltech的總裁)開發[2]。當時這個工具之所以取名為Qt,是因為在Haavard的Emacs字體中,字母Q看起來非常漂亮;而字母t的靈感則來源于當時的另一個工具Xt(X toolkit)的取名[3]。2008年Qt被Nokia公司收購,2012年8月Qt軟件業務出售給芬蘭IT服務公司Digia[4]。Qt支持多種平臺,如MS Windows、Linux/U nix、Mac OS及Android、iOS、Windows 8(WinRT)、Black-Berry 10、QNX、VxWorks、嵌入式Linux等移動設備和嵌入式平臺[5]。Qt強有力地支持著來自70多個行業中的主要企業開發了數以百萬計的產品,也是財富500強企業前10個企業中的5個所選擇的開發技術[6]。本文使用的是Windows 7桌面平臺,Qt版本為Qt5.6.1.Qt5.6.1的下載與安裝、設置構建套件、環境變量設置可分別參照文獻[15]正文第2-3頁、第6頁、第19 - 21頁。
1 窗口設計
根據需要確定出窗口尺寸,需要嵌入哪些窗口部件,部件位置。部件位置是指部件左上方那個點的橫坐標與縱坐標。以根據掘進斷面面積S和巖石堅固性系數f估算炮眼數目N公式為例編制一炮眼數估算器,其窗口如圖1所示。
根據掘進斷面面積S和巖石堅固性系數f估算炮眼數目N公式如(1)[7]所示:
2 代碼編寫
假設Qt安裝在E盤中,在E:\Qt中新建文件夾BINumEst(Blasthole number estimation縮寫),然后在其中新建四個文本文件,編寫相應代碼后分別保存為ui_widegt.h、widegt.h、widegt.cpp.main.cpp。
在ui_widegt.h中添加的代碼如下:
#ifndef UI_WIDEGT_H//與下面”endif”成對出現,檢查名為”ui_widegt'的頭文件是否被定義過
#defme UI_WIDEGT_H//定義名為”ui_widegt”的頭文件
#include //定義UI_WIDEGT_H需要調用的頭文件
#include
#include< QtWidgets/QApplication>
#include< QtWidgets/QButtonGroup>
#include< QtWidgets/QHeaderView>
#include< QtWidgets/QLabel>
#include< QtWidgets/QLineEdit>
#include< QtWidgets/Q PushButton>
#include
QT_BEGIN_NAMESPACE//開始宏[8]30
class Ui_Widegt//定義名為”Ui_Widegt”的類
{
public:
QLabel *label_1;//定義QLabel類的對象指針
QLabel *label_2;
QLabel *label_3;
QLineEdit *lineEdit_l;//定義QLineEdit類的對象指針
QLineEdit *lineEdit_2;
QLineEdit *lineEdit_3;
QPushButton *pushButton;//定義QPushButton類的對象指針
void setupUi(QWidget *Widegt)//定義一個生成界面的函數
(
if (Widget->obj ectName O.isEmptyO)
Widget->setObj ectName(QStringLiteral(' Widget”));ll如果對象名為空,將對象名設置為”Widegt"
Widegt->resize(210, 210);//設置窗口的寬和高
QFont font;//新建字體
font. setFamily(QStringLiteral(" Cambria Math"));//字體的種類為”Cambria Math"
font.setPointSize(18); 11字體的大小為18
label_l= new QLabeI(Widegt);//新建窗口部件,(Wide-gt說明部件在創建的對象Widegt的窗口內
label_l->setObj ectName(QStringLiteral ("Iabel_l”));//令部件的對象名為”label_l"
label_l->setGeometry(QRect(30, 20, 26, 30》;//確定音B件的橫坐標、縱坐標、寬、高
label_l->setFont(font);//新建的部件使用設置好的font字體
label_2= new QLabel(Widegt);
label_2->seto bj ectName(QStringLiteral("Iabel_2”));
label_2->setGeometry(QRect(30, 60, 26, 30》;
label_2->setFont(font);
label_3= new QLabeI(Widegt);
label_3->setObjectName(QStringLiteral( 'labeL3”));
labeL3->setGeometry(QRect(30, 100, 26, 30》;
labeL3->setFont(font);
lineEdit_l= new QLineEdit(Widegt);
lineEdit_l->setObj ectName(QStringLiteral("Iine-EdiL1“));
lineEdit_l->setGeometry(QRect(60, 20, 120, 30》;
lineEdit_l->setFont(font);
lineEdit_2= new QLineEdit(Widegt);
lineEdit_2->setObj ectName(QStringLiteral(' 'line-EdiL2”));
lineEdit_2->setCeometry(QRect(60, 60, 120, 30》;
lineEdit_2->setFont(font);
lineEdit_3= new QLineEdit(Widegt);
lineEdit_3->setObj ectName(QStringLiteral(' 'Iine-Edit_3”));
lineEdit_3->setGeometry(QRect(60, 100, 120, 30));
lineEdit_3->setFont(font);
pushButton= new QPushButton(Widegt);
pushButton->setObj ectName(QStringLiteral("pushBut-ton“));
pushButton->setC eometry(QRect(75, 150, 60, 30》;
pushButton->setFont(font);
retranslateUi(Widget);//對Widegt調用能對窗口內的字符串進行編碼的函數
QMetaObject:: connectSlotsByName(Widget);//調用了QMetaObject類的connectSlotsByName0靜態函數,使得窗口中的部件可以實現按對象名進行信號和槽的關聯[8po
)//setupUi
void retranslateUi(QWidget *Widget)//定義retranslateUi0函數
{
Widget->setWindowTitle(QApplication:: translate(' 'Wid-get”,”Widget", 0》;//設置窗口標題為”Widegt”
label_l->setText (QApplication:: translate("Widget",”f.”,0》;//設置標簽label_l顯示字符串”f.”
label_2->setText(QApplication:: translate("Widget", "S:“,0》;//設置標簽labeL2顯示字符串”s:"
label_3->setText(QApplication:: translate("Widget", "N:”,0》;//設置標簽label_3顯示字符串”N:"
pushButton->setText(QApplication:: translate(' Widget",”\350\256\241\347\256\227", 0》;設置按鈕pushButton顯示字符串”計算”,字符串”\350\256\241\347\256\227”是”計算”的UTF-8編碼
1,/retranslateUi
);
namespace Ui(//定義了一個命名空間Uic8]30,在其中又定義了一個繼承自Ui_Widegt類的Widegt類
class Widegt: public Ui_Widegt{};
)//namespace Ui
QT_END_NAMESPACE//結束宏[8]30
#endif//UI_WIDEGT_H
向widegt.h文件中添加如下代碼:
#ifndef WIDEGT_H//與下面”endif”成對出現,檢查名為”widegt”的頭文件是否被定義過
#define WIDE GT_H//定義名為”widegt'的頭文件
#include //引用QWidget類頭文件
namespace Ui(//定義了一個命名空間Ui,在其中又定義了一個繼承自Ui_Widegt類的Widegt類
class Widegt;
)
class Widegt:public QWidget//定義公共繼承QWidget類的Widget類
{
Q_OBJECT//定義了Q_OBJECT宏,擴展了普通C++類的功能[9]36
public:/,聲明Widget類的公有成員
explicit Widegt(QWidget *parent= 0);//是顯示構造函數,參數是用來顯示父窗口的,默認是沒有父窗口的[9]36
-Widegt0;//聲明析構函數
private slots: ll定義Widget類的私有槽
void on_pushButton_clicked();
private://定義Widget類的私有成員
Ui::Widegt *ui;,/創建Widget類的對象指針
};
#endif//WIDGET_H
往widegt.cpp文件添加如下的代碼:
#include”widegt.h”//調用widegt.h頭文件
#include”ui_widegt.h”//調用ui_widegt.h頭文件
#include//調用math.h頭文件,因為下面需要使用其中的pow0函數
Widegt:: Widegt(QWidget *parent)://Widegt類中的構造函數
QWidget(parent),
ui(new Ui::Widegt)//在Ui中新建Widegt類對象,名為Ul
{
this->setMaximumSize(210,210);//新建的窗口最大尺寸為2lOx210
this->setMinimumSize(210,210);//新建的窗口最小尺寸為2lOx210
ui->setupUi(this); ll令this代表新建的窗口
)
Widegt::-Widegt() /fWidegt類中的析構函數
{
delete ui; ll銷毀對象Ul
)
void Widegt:: on_pushButton_clicked0//定義與按鈕push-Button相關聯的模塊
{
//定義double型變量f,將輸入lineEdit_l的數字轉換成double型再賦值給f
double f=ui->lineEdit_l->textO.toDouble0;
,/定義double型變量S,將輸入lineEdit_2的數字轉換成double型再賦值給S
double S=ui->lineEdit_2->textO.toDouble0;
//定義double型變量N,將傳給lineEdit_3的數字轉換成double型再賦值給N
double N=ui->lineEdit_3->textO.toDouble();
N=3.3*pow《f*S*S),1.0/3); 11根據掘進斷面面積和巖石堅固性系數估算炮眼數目公式
//將以上公式計算出來的N值傳送給lineEdit_3
ui->lineEdit_3->setText(QString:.number(N》;
)
在main.cpp文件里添加以下代碼:
#include”widegt.h”//調用widegt.h頭文件
#include //調用QApplication類
int main(int argc。char *argvD)//因為Qt程序可以接受命令行參數,所以它需要argc和argv兩個參數[9126
{
QApplication a(argc,argv);//新建QApplication類對象
Widegtw;//新建Widegt類對象
w.setWindowTitle(QObject::tr(”炮眼數估算器”));//設置窗口的標題為”炮眼數估算器”
w.show0;//使窗口顯示出來
return a.exec0;//執行指令
)
3 在命令行編譯軟件
首先用鼠標左鍵單擊順序如下:“開始”一“所有程序”一“Qt 5.6.1”一“5.6”一“MinGW 4.9.2 (32-bit)'一“Qt 5.6 for Desk-top (MinGW 4.9.2 32 bit)'。之后命令行窗口打開,其次按以下順序輸入命令:“cd E:\Qt\BINumEst”一“qmake -project”(輸入此命令后,在BINumEst目錄中已經生成了BINumEst.pro文件。下面使用記事本打開該文件,然后在最后面添加如下一行代碼:greaterThan(QT_MAJOR_VERSION, 4): QT+=widgets[10])→“qmake”→“mingw32-make"_→cd release"→“BINumEst. exe”。最后BINumEst.exe可執行文件在BINumEst目錄中的release目錄中生成,炮眼數估算器窗口彈出。軟件的發布參見文獻[10]第21頁。
4 結束語
可視化編寫軟件方便、快捷,同時使用純代碼編寫軟件能更好地理解編寫軟件過程中所用思想、處理過程、操作方法,對深入學習Qt很有幫助。在編寫代碼過程中,需注意命名文件不能用中文,否則會出錯。若需要了解生成pro工程文件里的代碼,可以參見文獻[10]第25頁與第40頁,亦可參見文獻[9]第38頁與第39頁。
參考文獻:
[1]殷立峰.Qt C++跨平臺圖形界面程序設計基礎[M].北京:清華大學出版社,2014.
[2]陳志發,王苑增,嵌入式Qt實戰教程[M].北京:電子工業出版社,2015.
[3]霍亞飛,程梁.Qt 5編程入門[M].北京:北京航空航天大學出 版社,2015.
[4)鮑忠貴,王濤,陳凌暉.Qt編程快速入門[M].北京:清華大學出版社,2016.
[5]金大彌.Qt 5開發實戰[M].張紅艷譯,北京:人民郵電出版社,2015.
[6]安曉輝.Qt on Android核心編程[M].北京:電子工業出版社,2015.
[7]許建聰,地下工程施工技術[M].北京:中國建筑工業出版社,2015.
[8]霍亞飛.Qt Creator快速入門[M].北京:北京航空航天大學出版社,2012.
[9]霍亞飛.Qt Creator快速入門[M].2版.北京:北京航空航天大學出版社,2014.
[10]霍亞飛.Qt Creator快速入門[M].3版,北京:北京航空航天大學出版社,2017.
【通聯編輯:王力】
作者簡介:段振虎(1986-),男,重慶人,工程師,本科,主要從事土木工程研究。