999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Qt純代碼編寫軟件的方法實例

2020-11-10 04:38:45段振虎
電腦知識與技術 2020年27期

摘要:在工程建設過程當中,有時需要使用許多數學公式計算出相應的數據,然而有一些數學公式計算起來比較麻煩,同時可以使用軟件開發工具編寫相應的軟件來解決這個問題。使用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-),男,重慶人,工程師,本科,主要從事土木工程研究。

主站蜘蛛池模板: 日韩毛片免费观看| 国产69精品久久久久妇女| 欧美国产精品不卡在线观看| 亚洲无码高清一区| 久久久久久久久久国产精品| 国产一区三区二区中文在线| 欧洲日本亚洲中文字幕| 欧美激情第一欧美在线| 四虎成人在线视频| h网址在线观看| 中文字幕啪啪| 精品无码日韩国产不卡av | 精品少妇人妻无码久久| 亚洲欧美综合精品久久成人网| yy6080理论大片一级久久| 亚洲国产午夜精华无码福利| 亚洲精品国偷自产在线91正片| 高h视频在线| 在线观看免费人成视频色快速| 国产成熟女人性满足视频| 视频一区亚洲| 久久人搡人人玩人妻精品| 日本成人不卡视频| 午夜a级毛片| 婷婷六月综合网| 免费可以看的无遮挡av无码| 国产成人欧美| 亚洲成人免费在线| 欧美成人h精品网站| 亚洲三级电影在线播放| 国产精品视频白浆免费视频| 黄片在线永久| 亚洲V日韩V无码一区二区| 久久这里只精品热免费99| 国产精品入口麻豆| 国产一级毛片在线| 免费一级大毛片a一观看不卡| 五月婷婷导航| 亚洲乱码在线播放| 亚洲精品福利网站| www.av男人.com| 免费激情网址| 色国产视频| 22sihu国产精品视频影视资讯| 一级看片免费视频| 91精品久久久无码中文字幕vr| 999精品在线视频| 红杏AV在线无码| 成人精品在线观看| 露脸一二三区国语对白| 91国内在线观看| 热热久久狠狠偷偷色男同| 在线a网站| 亚洲国产欧美目韩成人综合| 国产不卡在线看| 色香蕉影院| 国产亚洲精品无码专| 九九热视频在线免费观看| 欧美不卡视频一区发布| 五月天丁香婷婷综合久久| 全部毛片免费看| 精品日韩亚洲欧美高清a| 国产一级毛片yw| 欧美精品在线观看视频| 国产性生交xxxxx免费| 秋霞一区二区三区| 四虎影视无码永久免费观看| 99性视频| 成人看片欧美一区二区| 亚洲欧美另类中文字幕| 亚洲精品爱草草视频在线| 亚洲天堂网站在线| 欧美在线视频不卡| 欧洲熟妇精品视频| 57pao国产成视频免费播放| 欧美午夜小视频| 国产精品短篇二区| 1769国产精品视频免费观看| 欧美国产在线一区| 免费aa毛片| 国产av一码二码三码无码| 亚洲欧美一级一级a|