Qt Creator 计算器.docx_第1页
Qt Creator 计算器.docx_第2页
Qt Creator 计算器.docx_第3页
Qt Creator 计算器.docx_第4页
Qt Creator 计算器.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安装完以后,在程序集中你就可以选择Qt Creator开始执行先new一个Qt项目,因为要开发有画面的程序,所以先选择Gui下一步:设定项目名称与位置接着设定函式库,先用预设就好设定项目的类别名称,这边你就可以自行命名了!建好后,精灵会帮你建好方案档以及相关的资源文件夹在这边比较重要的几个档会是:Forms(应用程序ui),你也可以不用有这个文件,你可以在程序中宣告对象再定义其layout也是可以的。 Application Name.ui - the user interface file created with Qt DesignerHeaders(应用程序类别头文件) Application Name.h - the definition file for the Application Name class,Resources(程序代码档):至少会有下列两个檔 main.cpp - the file containing a main() function, with an instance of Application Nameo 通常不会更改什么数据,这边的程序会建立一个application的实例 Application Name.cpp - the implementation file for the Application Name classo 注意:Subclassing 技巧可以让你写的widget程序再利用(若建立的是widget项目,则自动subclassing到main window之下,这边仅是Win App首先我们通常在IDE的环境中,我们可能会先拉一些控件(qt里面称为widget)。Qt也提供了Designer来提供VS使用Qt项目的控件!叫Qt设计家你只要点击.ui档开启即可。 长的如下图,左边是控件的toolbox,使用过vs的就不用再多作说明了!我们做一个简单到不行的计算器,透过输入两个input,然后决定操作数,实时计算出结果所以我们一如往常的把控件拉到窗口画面中!像这样!方便的是他的设计器也可以帮你快速的建立应用程序的基本功能控件,而画面的美观与排列可以透过他的layout设定快速达到有组织的程序接口!范例如下:(官网范例)如何定义应用程序的Layout?1.用UI Designer2.用程序定义QGridLayout *mainLayout = new QGridLayout;mainLayout-addWidget(nameLabel, 0, 0);mainLayout-addWidget(nameLine, 0, 1);mainLayout-addWidget(addressLabel, 1, 0, Qt:AlignTop);mainLayout-addWidget(addressText, 1, 1);另外你可以透过对象指示器来看到你所拉的结构你可以清楚看到他们的父子关系,而这些控件其实都是从他的函式库由各widget类别所定义的定义好画面以后,我们先记录一下我们有哪一些widget(控件)运算符1:只能为整数 input1SpinBox:doubleSpinBox,读取单行box中的double数字操作数,定义加减乘除 OperatorComboBox:ComboBox,选项有+ * /,分别对应index 14运算符2:只能为整数 input2SpinBox:同1运算结果(可以是doulbe) lbl_Result:Label,同vs的label控件建好了这些widget,我们必须要给他们加入事件来反应!一般在vs中,我们可以在控件的属性窗口那边去定义一些触发的事件在程序代码中也可以宣告与呼叫function或sub等程序。在Qt这边是透过Signals与Slots来定义对象的互动因此如何让Qt程序的Widget(按钮)有他们的功能?假如新增了一个按钮,当我们触发了按钮的事件以后例如:Clicked()(代表我们在按钮上click了一下)按键程序就会传出一个Signals讯息讯息必须要有Slots接口来接,因此您必须定义Slots的方法来取得signal的数据!而他们之间的connect建立方式有两种一种是手动的建立connect,在qt中可以透过窗体设计器来透过控件精灵来透过内建的signal事件来找到slot接口不过我们先了解qt的原理后,手动建一次看看应用到我们的程序事件,我们想一想当我们输入数字以后、选择不同的操作数以后,就要马上执行计算!因此我们必须透过widget的事件方法来侦测这些widget的变动!除此之外,我们希望建立一个function,只要当widget一变动,程序就会自动呼叫计算的function,所以我们要先建立一个function看看那如何新增一个自定义的function?C+中你都要先在类别头文件(.h)建立宣告看你要开放还是私有,就放在对应的宣告区块return value type + function name +(parameters type , name)这边建立的计算的function我们称为:Exec因此打开头文件calculator.h,建立一个function的宣告 1: private: 2: Ui:CalculatorClass ui; 3: double Exec(int value1,int Op,int value2);接着你可以在calculator.cpp档中建立方法的实作: 1: double CalculatorForm:Exec(double value1,int Op,double value2) 2: double result; 3: switch (Op) 4: 5: case 1: 6: result = value1 + value2; 7: break; 8: case 2: 9: result = value1 - value2; 10: break; 11: case 3: 12: result = value1 * value2; 13: break; 14: case 4: 15: result = value1 / value2; 16: break; 17: 18: 19: return result; 20: 注:记住要用double Calculator:来选取function Exec哟!定义好方法后,我们就知道,当控件的变动事件一触发,就把现在widget的值传到这个function来那控件的事件怎么定义呢?先前说明了Signals与Slots来定义对象的互动因此我们先来定义一下有哪些slots方法(只要是方法也都是要在头文件.h中宣告哦)此例中,signals的方法都是由widget的事件所定义,所以直接在Widget右键单击有一个go to slots,就可以自动建立触发事件与slot事件的关系(自动建立)选择一个字符串变动的事件slots我们就可以看到QT会自动帮我们建立触发事件的方法与参数.h档会自动宣告,另外cpp档会产生实作区 1: void CalculatorForm:on_input1lineEdit_textChanged(QString input) 2: 3: /实作接收到signal后的行为 4: 5: 6: void CalculatorForm:on_input2lineEdit_textChanged(QString input) 7: 8: /实作接收到signal后的行为 9: 至于如何自己手动建立connect呢?本例的combobox则不透过自动建立事件的方式,所以要先到头文件(.h)中的slot方法区称去宣告这边宣告的slots方法 1: private slots: 2: void OperatorComboBoxChanged(int index); /手动建立与手动命名 3: void on_input2lineEdit_textChanged(QString input); /自动建立与命名 4: void on_input1lineEdit_textChanged(QString input); /自动建立与命名到同类别名cpp档中的建构子(类似于Form_load事件),建立slots方法实作 1: connect(ui-OperatorComboBox,SIGNAL(currentIndexChanged(int),this,SLOT(OperatorComboBoxChanged(int);3.建立signals方法与刚刚建立的slots方法的连结connect(传送者,例如:ui-控件名称, SIGNAL(传送者的触发事件,例如click(), 接收者对象名称, SLOT(slot的方法名称();注:如何知道控件所有可以触发的方法?控件都会在ui的类别定义所以可以透过ui对象来取得1.透过ui-控件名称-方法事件2.直接在ui designer点选右键go to Slot(会让你选择内建名称,列出有signals的方法)最后我们完成我们的程序逻辑1.在本窗口对象被建立的时候要将运算符号加减乘除setup起来,所以要在建构子来建立程序代码(类似form load事件) 1: CalculatorForm:CalculatorForm(QWidget *parent) : 2: QWidget(parent), 3: ui(new Ui:CalculatorForm) 4: 5: /将ui对象设定成本对象 6: ui-setupUi(this); 7: 8: 9: /此为手动建立connect,其他input的事件自动建立关联 10: connect(ui-OperatorComboBox,SIGNAL(currentIndexChanged(int),this,SLOT(OperatorComboBoxChanged(int); 11: 12: /定义ComboBox控件的组件 13: ui-OperatorComboBox-addItem(tr(Choose); /tr是指将字符转换成QString 14: ui-OperatorComboBox-addItem(tr(+); /1 15: ui-OperatorComboBox-addItem(tr(-); /2 16: ui-OperatorComboBox-addItem(tr(*); /3 17: ui-OperatorComboBox-addItem(tr(/); /4 18: 2.当对象变动时,就要重新计算(这边直接贴上,先不论程序代码的好坏),所有的控件触发方法都要有这段逻辑哦!包含了: 1: private slots: 2: void OperatorComboBoxChanged(int index); /手动建立与手动命名 3: void on_input2lineEdit_textChanged(QString input); /自动建立与命名 4: void on_input1lineEdit_textChanged(QString input); /自动建立与命名之后有空再refactor他 1: if (ui-OperatorComboBox-currentIndex()=3 & ui-input2SpinBox-value()=0) 2: QMessageBox:information(this, tr(错误),tr(除数请勿为0); 3: else 4: ui-lbl_Result-setText(QString:number( 5: Exec( 6: ui-input1SpinBox-value(), 7: ui-OperatorComboBox-currentIndex(), 8: ui-input2SpinBox-value(); 9: 咦有一个档我们完全没有动过,那就是main檔! 1: int main(int argc, char *argv) 2: 3: QApplication a(argc, argv); 4: CalculatorForm w; 5: w.show(); 6: return a.exec(); 7: main文件之前说,是程序的进入点,所以在这边我们也是没有要改变!这边的程序会建立一个Qapplication的实例接着来Build看看吧恩有了,窗口程序ok了!那这个专案先放一边!用VS 2008的命令提示字符输入以下1. cd C:UsersPINNBDocumentsCalculatorForm(看自己设在哪)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论