




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
无责任、超简明Qt教程-计算器Exilefox2012年4月1日之前发了一个Qt Desiger设计ui的入门教程,本篇本来是三部曲的第二部分,但是本人最近要到深圳找饭吃,各种忙,所以只能不负责任的草草把这篇先发出来,至于什么时候能完成全部3篇我也不知道。所以各位看官如果对Qt有兴趣,不要等,积极探索,说不定等我发第三篇的时候各位已经是高手啦上篇着重做了界面,而一个完整的项目需要界面和功能的结合,所谓内外兼修嘛这篇主要讲如何将界面与函数实现结合起来,顺带再穿插一些stylesheet的内容。同样,只是个引子,以最简单的计算器为例。我们要做的计算器是这样一个东西:有09 十个数字按键、一个加号键、一个减号键,一个清除键,一个回车键、一个显示框。我承认我懒,这个计算器就只能实现加减法运算,是不是弱爆了?没关系,你要搞个乘除法、进制转换什么的原理是一样滴新建工程时候选择Widget而不是mainwindow,毕竟我们计算器没高级到需要一个菜单什么的。在这里我们还自己改了一下这个类的名称,方便记忆嘛Qt还挺聪明的,你改了类名称下面的几个文件名称也自动跟着改了。一、编辑UI工程建立了和上次一样,先直接做.ui文件。如图,只用到两类控件 pushButton 和lineEdit先拖一个pushButton出来,改名为button_1 ,修改显示的文字为1 。剩下的数字键也要这样?非也,你只需选中,ctrl+C,ctrl+v几次就一个个出来了。对象名字什么的是自动连续的,但是显示内容就得自己动手改了。剩下的按钮自己能够搞定了吧?拖个LineEdit出来做显示。从名字可以知道这家伙是输入类型的,而计算器显示不是输出的吗?用textBrowser不是更准确一些吗?实际上用textBrowser也是可以的,但到后面我发现他有个问题,这货死活不能靠右显示。而官方的例子里面用的是lineEdit,只不过加了句代码setReadOnly(true);把它设置成了readonly。从这点展开将,我想让大家知道的是这些控件的应用可以是很灵活的,输入的可以用来显示,按钮贴上图做图标什么的,想象力+大胆尝试, QtDesigner自带的控件就可以满足你大部分的要求。计算器的框架大体有了,是不是觉得不太好看呢?在这里我们用stylesheet做一些简单的修饰。字体加大加粗:对所有的Qbutton都有效,所以在总体控件的空白处点右键-改变样式表弹出的串口先输入要修改的对象QPushButton-请注意到和上一节我们讲的相比,这里少了#号,表示这个ui里面所有的pushbutton类的控件都生效。把光标移到中,点选择字体,选择好后对字体样式的描述就自动写到里了。点击确定看看大家是否都变得又黑又粗了呢-?个别、字体改变颜色:不过眼尖的你也许看到了enter因为变得太大而超出格子了,而且我们希望加号减号键这些有其他的颜色。所以我们再这对个别修改一下。在enter键上点右键-改变样式表 ,除改变字体之外我们还可以选添加颜色来改变颜色。剩下几个按键也有你喜好修改好。改变边框圆角:对那个方方正正的显示框我们也来修改一下,步骤同前面一样请注意这里有个border-radius: 10px;他是边框棱角的设置选项,但是这东西在编辑样式表对话框的下拉菜单中是找不着的,各位就要手动输入了。这类没列出来的属性还有很多,靠大家平时积累记住,另外就是上/4.3/stylesheet-reference.html查一查,那里列出了有什么控件可以修改stylesheet,可以修改那些属性。二、实现函数至此ui相关的大部分工作就完成了,接下来我们来充实一下函数的实现。由于本篇侧重讲功能与界面的结合,就不可能像上一篇那样宣称只用几行代码搞定了,但是实际上也不多。以下是纯c+编程部分,给出的代码是我偷懒的代码,各位完全可以用自己的方式来实现。连接槽函数:在数字按键上点击右键-转到槽函数,选择信号为click(),这样我们就跳到了.cpp文件里,这时程序已经把声明什么的写好,就等着我们来填坑了你会发现这些槽函数的名字很有规律void calculor:on_button_1_clicked(),复制粘贴,改一下button_1我们就把其他的槽函数一起建好了,坑挖好了,但是还是没有内容,先留着,去.h在类定义中加一些我们需要的变量。.h文件先是一堆槽函数的声明,这个是自动生成的。后面的私有成员定义:首先是两个计算数,frist和second,当然还有结果result然后是表示现在输入的是frist还是second的标志位,我们用个枚举来做,当有加号、减号按下时这个状态由FRIST转到SECOND结构体SIGN存放的是表示进行加法还是减法的标志位其他的请各位看注释.cpp文件这里重点是cal和trans,plus三个函数的实现解释一下trans里面这句ui-lineEdit-setText(QString:number(frist);调用对象ui里面的子对象的函数setText以实现找lineEdit里面显示数字ui这个对象我们在上一篇提到过,是系统自动生成的.ui界面文件的类的对象(好拗口),总之,就是我们在.ui里面画的那些东西都在这个对象下面。QString:number(frist)表示把数字转换成字符串。这是由于setText的参数要求要是字符串型。(把鼠标悬停在函数名上一会儿就会显示这个函数的参数类型等相关信息)剩下的那些void calculor:on_button_1_clicked()里面实现的就是点击数字键就执行trans函数把数字转换成frist或者second里,并显示出来。void calculor:on_button_plus_clicked()等和数字键的功能有些不同,比如按了plus要把当前状态从FRIST换到SECOND,还要实现判断是否是连加的情况。最后来看看构造函数,在这里我们完成对lineEdit的进一步修饰。前面我们提到了两个问题:lineEdit设为只读 ui-lineEdit-setReadOnly(true); lineEdit要靠右显 ui-lineEdit-setAlignment(Qt:AlignRight);好,解决了。编译一下,计算器就出来啦。.cpp文件#include ui_calculor.h#include calculor.hcalculor:calculor(QWidget *parent) : QWidget(parent), ui(new Ui:calculor) /this-setWindowOpacity(0.7); ui-setupUi(this); ui-lineEdit-setAlignment(Qt:AlignRight); ui-lineEdit-setReadOnly(true); my_state=FRIST; my_sign=NO; frist=0; second=0; result=0;calculor:calculor() delete ui;/* 函数名:on_button_x_clicked() 作用:数字按键点击信号的槽函数*/void calculor:on_button_1_clicked() trans(1);void calculor:on_button_2_clicked() trans(2);void calculor:on_button_3_clicked() trans(3);void calculor:on_button_4_clicked() trans(4);void calculor:on_button_5_clicked() trans(5);void calculor:on_button_6_clicked() trans(6);void calculor:on_button_7_clicked() trans(7);void calculor:on_button_8_clicked() trans(8);void calculor:on_button_9_clicked() trans(9);void calculor:on_button_0_clicked() trans(0);/* 函数名:on_button_enter_clicked() 作用:enter按键点击信号的槽函数,调用cal()计算,最后清空*/void calculor:on_button_enter_clicked() cal();/ 如果按下,调用cal函数计算结果 ui-lineEdit-setText(QString:number(result);/ 显示结果 frist=0;/ 清除frist和second以及相应的状态标识 second=0; my_state=FRIST; my_sign=NO;/* 函数名:on_button_plus_clicked() 作用:加号按键点击信号的槽函数,my_sign置PLUS*/void calculor:on_button_plus_clicked() my_sign=PLUS;/ 如果按下,向sign变量中存放+号标志 if(my_state=SECOND)/连续加的情况 cal(); ui-lineEdit-setText(QString:number(result);/ 显示结果 frist=result; second=0; my_state=SECOND;/ 把状态标志指向second/* 函数名:on_button_minus_clicked() 作用:减号按键点击信号的槽函数,my_sign置MINUS*/void calculor:on_button_minus_clicked() my_sign=MINUS;/ 如果按下,向sign变量中存放+号标志 if(my_state=SECOND)/连续加的情况 cal(); ui-lineEdit-setText(QString:number(frist);/ 显示结果 frist=result; second=0; my_state=SECOND;/ 把状态标志指向second/* 函数名:on_button_clean_clicked() 作用:clean按键点击信号的槽函数,清空显示和数据*/void calculor:on_button_clean_clicked() ui-lineEdit-clear(); my_state=FRIST; my_sign=NO; frist=0; second=0; result=0;/* 函数名:trans() 作用:将传入的数组合成十进制*/void calculor:trans(char key) if(my_state=FRIST) frist=frist*10+(int)key;/将传入的数组合成10进制传给first ui-lineEdit-setText(QString:number(frist);/显示 else second=second*10+(int)key;/将传入的数组合成10进制传给second ui-lineEdit-setText(QString:number(second);/显示 /* 函数名:cal() 作用:根据my_sign选择进行何种计算,结果保存在result*/void calculor:cal(void) switch(my_sign) case PLUS:result=frist+second;break; case MINUS:result=frist-second;break; .h文件#ifndef CALCULOR_H#define CALCULOR_H#include namespace Ui class calculor;class calculor : public QWidget Q_OBJECT public: explicit calculor(QWidget *parent = 0); calculor(); private slots: void on_button_1_clicked(); void on_button_2_clicked(); void on_button_3_clicked(); void on_button_4_clicked(); void on_button_5_clicked(); void on_button_6_clicked(); void on_button_7_clicked(); void on_button_8_clicked(); void on_button_9_clicked(); void on_button_0_clicked(); void on_button_clean_clicked(); void on_button_enter_clicked()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行岗位试题预测试卷附答案详解【能力提升】
- 醉酒驾驶与毒驾相关法律法规试题及答案
- 2025年有色金属行业资源循环利用产业链产业链绿色生产与清洁生产研究报告
- 考点解析北师大版9年级数学上册期中试题含答案详解AB卷
- 2025至2030年中国银杏茶叶市场调查研究及行业投资潜力预测报告
- 押题宝典执业药师资格证之《西药学专业二》试题及参考答案详解【a卷】
- 护士企业编制面试题库附完整答案详解【必刷】
- 2025年智能路灯控制系统开发合同
- 2025年度特种设备安全检测第三方服务合同
- 2025版自驾租赁公司司机入职合同范本
- 2025企业级AI Agent(智能体)价值及应用报告
- 《党政机关厉行节约反对浪费条例》培训课件
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
- 第二章-基因工程的载体和工具酶课件
- 政府采购评审专家考试题库(含答案)
- 新教材人教A版高中数学选择性必修第一册全册教学课件
- 75号公告专利收费项目和标准(官费)
- 高中生物第一课-(共24张)课件
- 电气原理图基础知识课件
- 新教师跟岗学习实施方案
- 2022年高考全国甲卷:写作指导及范文课件16张
评论
0/150
提交评论