标题 | 基于Qt纯代码编写软件的方法实例 |
范文 | 摘要:在工程建设过程当中,有时需要使用许多数学公式计算出相应的数据,然而有一些数学公式计算起来比较麻烦,同时可以使用软件开发工具编写相应的软件来解决这个问题。使用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-),男,重庆人,工程师,本科,主要从事土木工程研究。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。