高效学 C++|编程实例之计算器( 二 )


首先判断左右操作数和运算符都存在,然后将字符串形式的操作数转换为类型的操作数,由类的成员函数实现;然后再根据运算符的不同分别进行不同的计算,结果放在中;对于除法,代码中添加了对除数为0时的出错处理;最后将算得的结果显示在文本框中(的静态成员函数用于将给定的参数转换为字符串形式),并清空相关数据以等待下一次计算 。
上述代码中使用到了类,因此还需在.cpp文件中添加头文件:
#include
到此功能已全部实现,运行程序可查看效果 。图3-33的左图为输入了按下按钮“2”、“3”、“+”之后的效果,右图为再按下按钮“5”、“.”、“1”、“=”之后的效果 。
■图2计算器运行效果示例
03、登陆界面设计
接下来,考虑在上述已实现计算器的基础上添加一个登陆的功能:程序运行时首先显示一个登陆界面,只有当输入了正确的用户名和密码后,才能打开计算器 。
实际上,除了可以在项目创建向导中给应用程序主窗口选择“使用界面”外,在项目中新增自定义C++窗口(或部件)类时,也可以使用界面 。接下来在项目中添加一个带界面的登陆对话框类,操作步骤如下:
在项目名处右单击,弹出的菜单中选择“…”,打开如图3所示的界面 。选中“Qt”下的Qt设计师界面类,以创建一个Qt设计师界面类 。
■图3选择创建Qt设计师界面类
点击图3的 “…”按钮后进入到选择界面模板的步骤,见图4 。所谓“选择界面模板”,是指准备在哪种窗口(或部件)的基础上进行更多的设计(即选择窗口或部件类型做为自定义窗口类的基类),本文中选择“”,即使用类作为基类 。
■图4选择界面模板
点击“下一步”,进入图5所示界面 。在类名文本框中填入自定义登陆对话框类的名字(本文使用“”),下方会自动生成相关的头文件、源文件和界面文件的名字,也可以修改这些文件的文件名(但不建议修改)以及默认以当前工程目录为存放路径 。
■图5设置自定义登陆对话框类的类名
再次点击“下一步”,完成带界面自定义登陆对话框类的初始创建 。可以看到,工程中已新增了三个与该类有关的文件 。
双击“.ui”文件打开界面设计师 。将对话框窗口标题(属性)设置为“登陆”;然后往窗口中拖入两个标签、一个按钮和两个单行文本框;标签和按钮显示的文字如图6所示,各部件的名字见图中的对象浏览器窗口 。
■ 图6登陆对话框界面设计
设置标签为右对齐(属性:“”);设置密码文本框的为“”,使得输入数据时显示为表示密码的黑色圆点;将窗口设置为“栅格布局”以方便的对齐各个部件;为了方便用户使用,还可指定部件的Tab键顺序、设置标签的快捷键及和单行文本框的伙伴关系 。
04、登陆功能的实现
首先给登陆对话框类添加一个信号,在类定义中(.h文件)添加代码如下:
signals:void LoggedIn();
然后给“登陆”按钮的()信号添加自关联槽,代码实现如下:
void LoginDialog::on_loginBtn_clicked(){if(ui->userEdit->text()=="admin"&&ui->pwdEdit->text()=="123456"){emit(LoggedIn());hide(); //隐藏登陆窗口}elseQMessageBox::information(this, "提示","用户名和密码错误");}
当输入了正确的用户名和密码时将发射信号(目的是通知计算器窗口把自己显示出来,信号槽关联在随后的主函数中),然后将登录对话框隐藏;否则提示用户名和密码出错 。