网站首页  词典首页

请输入您要查询的论文:

 

标题 基于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下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/10 7:42:48