《实验四Qt编写简单的计算器》由会员分享,可在线阅读,更多相关《实验四Qt编写简单的计算器(17页珍藏版)》请在金锄头文库上搜索。
1、实验四 Qt 编写简单的计算器一、 【实验目的】1) 熟悉 QtCreator 的简单操作。2) 了解 Qt 程序编写框架。3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。二、 【实验内容】1) 查看 API 手册,学习简单的 Qt 类的使用,如 QLineEdit、QPushButton等。2) 用 QtCreator 创建工程,用 Qt 编写计算器程序。3) 对计算器程序进行移植。三、 【实验步骤】1. 创建工程1) 打开 QtCreator,如图 1 所示。图 12) 选择 File-New File or Project,然后在弹出的对话框中选择 Other Project
2、-Empty Qt project(如图 2 所示) ,然后进入下一步。图 23) 定义新工程的工程名并选择保存路径(如图 3 所示) ,然后进入下一步。图 34) 选择 Qt 版本,这里选择使用 Qt4.7.1,取消对 Qt in PATH 的选择(如图 4 所示) ,然后进入下一步,完成新工程的创建(如图 5 所示) 。图 4图 52. 计算器程序的实现计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。1) 计算器图形界面的实现通过分析计算器的功能我们可知,需要 16 个按键和一个显示框,同时考虑到整体的排布,还
3、需要水平布局器和垂直布局器。通过组织这些类我们可以实现一个简单的带有数字 09,可以进行简单四则运算且具有清屏功能的计算器。对于这些类的具体操作会在后面的代码中详细说明。2) 信号和对应槽函数的绑定分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键 09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=” ;三是清屏操作键,用于显示框显示信息的清除。3) 进入刚才创建的空工程,双击左侧的 Calculator.pro,在主编辑框中目前显示 Calculator.pro 的内容为
4、空,如图 6 所示。这是因为目前什么文件都没有添加的缘故。图 64) 添加文件 calculator.h在工程 Calculator 上面点击右键,然后点击 Add New,选择添加 C+ Header File(如图 7 所示),进入下一步后输入文件名 calculator.h(如图 8 所示),然后完成文件的添加。图 7图 85) 添加文件 calculator.cpp 和 main.cpp与添加文件 calculator.h 的过程类似,只是在选择文件类型时选择为 C+ Source File。完成后可以查看 Calculator.pro 文件的内容,整个工程的文件结构如图 9 所示。图
5、 93. 计算器程序源代码的分析说明1) 对 calculator.h 源代码的简要说明#ifndef CALCULATOR_H#define CALCULATOR_H /对calculator.h头文件的声明#include/包含主窗体类#include/包含按键类#include/包含垂直布局器类#include/包含水平布局器类#include/包含显示框类class Calculator : publicQWidget/计算器继承自主窗体类Q_OBJECT /必须加上这句,如果要调用信号,槽函数的操作的话public:Calculator(); /计算器类的构造函数Calculator
6、(); /计算器类的析构函数public slots: /定义各个按键按下后对应操作处理的槽函数voidzeroButtonPress();voidoneButtonPress();voidtwoButtonPress();voidthreeButtonPress();voidfourButtonPress();voidfiveButtonPress();voidsixButtonPress();voidsevenButtonPress();voideightButtonPress();voidnineButtonPress();voidaddButtonPress();voidsubButt
7、onPress();voidmulButtonPress();voiddivButtonPress();voidclearButtonPress();voidequButtonPress();private:QLineEdit *operateEdit;/声明显示框QPushButton *zeroButton;/声明数字按键QPushButton *oneButton;QPushButton *twoButton;QPushButton *threeButton;QPushButton *fourButton;QPushButton *fiveButton;QPushButton *sixB
8、utton;QPushButton *sevenButton;QPushButton *eightButton;QPushButton *nineButton;QPushButton *clearButton;/声明运算符按键QPushButton *addButton;QPushButton *subButton;QPushButton *divButton;QPushButton *mulButton;QPushButton *equButton;QHBoxLayout *firstLayout;/声明水平布局器,该布局器主要对16个按键进行布局QHBoxLayout *secondLay
9、out;QHBoxLayout *thirdLayout;QHBoxLayout *fourthLayout;QVBoxLayout *mainLayout;/声明垂直布局器,该布局器主要对主窗体上面的空间进行排布QString input1;/计算器第一个运算操作数QString input2;/计算器第二个运算操作数char operate;/运算符;#endif/ CALCULATOR_H2) 对 calculator.cpp 源代码的简要说明首先是构造函数的实现:Calculator:Calculator()operateEdit = newQLineEdit(this);/初始化显示
10、框operateEdit-setReadOnly(true); /设置显示框为只读operateEdit-setText(tr(0);/初始化显示框显示数据为0zeroButton = newQPushButton;/初始化按键zeroButton-setText(tr(0);/设置按键上显示的标签,以下对按键相关的操作类似oneButton = newQPushButton;oneButton-setText(tr(1);twoButton = newQPushButton;twoButton-setText(tr(2);threeButton = newQPushButton;threeB
11、utton-setText(tr(3);fourButton = newQPushButton;fourButton-setText(tr(4);fiveButton = newQPushButton;fiveButton-setText(tr(5);sixButton = newQPushButton;sixButton-setText(tr(6);sevenButton = newQPushButton;sevenButton-setText(tr(7);eightButton = newQPushButton;eightButton-setText(tr(8);nineButton =
12、newQPushButton;nineButton-setText(tr(9);clearButton = newQPushButton;clearButton-setText(tr(Clear);addButton = newQPushButton;addButton-setText(tr(+);subButton = newQPushButton;subButton-setText(tr(-);mulButton = newQPushButton;mulButton-setText(tr(*);divButton = newQPushButton;divButton-setText(tr(
13、/);equButton = newQPushButton;equButton-setText(tr(=);firstLayout = newQHBoxLayout;/初始化水平布局器 firstLayoutfirstLayout-addWidget(zeroButton); /把按键zeroButton添加到firstLayoutfirstLayout-addWidget(oneButton); /把按键oneButton添加到firstLayoutfirstLayout-addWidget(twoButton); /把按键twoButton添加到firstLayoutfirstLayout
14、-addWidget(addButton); /把按键threeButton添加到firstLayout ,以下对水平布局器的操作类似secondLayout = newQHBoxLayout;secondLayout-addWidget(threeButton);secondLayout-addWidget(fourButton);secondLayout-addWidget(fiveButton);secondLayout-addWidget(subButton);thirdLayout = newQHBoxLayout;thirdLayout-addWidget(sixButton);t
15、hirdLayout-addWidget(sevenButton);thirdLayout-addWidget(eightButton);thirdLayout-addWidget(mulButton);fourthLayout = newQHBoxLayout;fourthLayout-addWidget(nineButton);fourthLayout-addWidget(clearButton);fourthLayout-addWidget(equButton);fourthLayout-addWidget(divButton);mainLayout = newQVBoxLayout(t
16、his);/初始化垂直布局器 mainLayoutmainLayout-addWidget(operateEdit); /把显示数据框operateEdit加到mainLayoutmainLayout-addLayout(firstLayout); /把水平布局器firstLayout添加到mainLayoutmainLayout-addLayout(secondLayout); /把水平布局器secondLayout 添加到mainLayoutmainLayout-addLayout(thirdLayout); /把水平布局器thirdLayout添加到mainLayoutmainLayout-addL