想要实现的功能就是类似于QQ的登陆界面。当用户名和密码输入正确的时候,进入到另外一个界面。若输入错误,则给出提醒。同时也具有退出功能,输入的密码变成圆点。
vs2010,qt 5.2.1 (相关内容,上传至http://download.youkuaiyun.com/detail/cy_543/7043933,不要积分的哦!)
作为自己的第二个程序,经过认真的梳理之后,思路就变得比较清晰了。下面开始了。
注:利用qt设计师和vs完成,这里没有用到qt creater。这个内容暂时涉及不到。
1、首先是创建Qtproject,命名为login1.此前已经用过login了。不断地去做的缺点之一就在于词穷,而又非常希望能将这个过程清楚地记录下来。
2、一个确定,两个下一步之后,就进入了下面的界面。QMainWindow,QDialog,Qwidget,这三个基类的用法。尽管还是有点迷糊,不过已经有了一定的了解。参考如下:http://www.cnblogs.com/aqxin/archive/2011/05/23/2054156.html
最起码知道,登陆界面是要选择QDialog。相信这个问题在后续的实践中会慢慢清晰。
3、点击finish。login1解决方案就生成了。
4、接下来就是要用Qt设计师对登陆界面进行设计。点开login.ui,就进入了Qt设计师的界面了。这里用户名和密码用label,需要填入文字的地方用LineEdit,登陆和退出用 PushBotton就可以了。然后将需要修改的地方修改一下就OK了。
5、更改上面的六个对象的名字。点击用户名,在Qt设计师的右侧,objectivename显示为label,更改为username.以此类推,将所有的对象都更改名字。
密码----password
输入的用户名---UserLineEdit
输入的密码-----PassWordLineEdit
登陆-----loginButton
退出----exitButton
这样就完成了登陆界面的设计。但是具体的功能还是没有的。比如 点击登陆和退出是没有任何反应的。那么想让这些对象实现想要的功能,那就需要在vs上来填写。
6、接下来设计一下进入之后的界面。这个界面,暂时让里面显示一句话。当然了,想要让功能强大,还是需要更多的努力。
在login1解决方案上点击右键,然后添加,类。
7、出现如下界面。
8、点击添加
这里将classname设为welcome, Base class设为QWidget.(这个有没有关系呢?) 这里如果设置成QDialog,有什么关系呢?暂时没有尝试,不过貌似自动生成的内容就变了。有一次做的时候,设置QMainWindow,出了点问题,不知道是不是这个了。
9、点击finish。就出现了welcome的ui,h,cpp文件。
10、双击welcome.ui,就进入了QT设计师的界面了。添加textbrowser,之后在里面输入想表达的内容。只是本人是在不知道进入之后该做什么,所以就这样显示一下吧。暂时不做其他的处理。等到以后去做聊天软件的话,就用得上了
可以尝试生成解决方案,并执行一下。此时vs会编译成功,因为我们还没有添加任何东西,出错是不可能的了。这都是系统自己设定好的了。之后我们往里面添加东西就可以了。 这个部分可能比较纠结,也可能会有解释不清楚的地方。还希望大家提出宝贵的意见。
11、需要填写的内容就是在这几个文件里了。当然除了login1.qrc.
一步一步的效果。慢慢来看。由于welcome暂时没有什么功能需要实现的,所以就内容需要添加。
12、首先对登陆按钮的单击功能,即on_clicked()函数。需要在login1.h中进行声明。这是一个槽函数,类型为private.所以在login1.h
添加有注释的两行是自己的内容。这样就完成了函数声明。
13.接下来就去login1.cpp里面添加on_clicked函数,connect等。
第二行就是一个声明吧,用来显示一个messagebox。
第7行就是将用户名变成黑点。QLineEdit::Password必须为大写,这个跟设计的名字没有关系。
第8,9行的目的就是将loginButton,exitButton与两个函数分别连接起来。只有这样在点击按钮的时候才会完成登录和退出的功能。
然后是第13行添加的on_clicked()函数。login1:: 后面的::是作用域。当然表明,这是我私有的。其他地方,你不能用的了。这个函数的意思就是如果用户名填写qt,密码是123456.这样就可以接受,然后显示一下进入之后的界面。这就让人联想到QQ,如果是有大量的用户,就跟数据库有关系了。所以,要做的东西还是很多的。如果错误就会有个提示。这里QMessageBox::warning,一开始的时候我把warning的首字母大写了,然后也出现问题了。可见这里还是比较讲究的。至于什么原因,待我细细查明。
比较建议这里面的内容都是自己一个字一个字的敲进去。自己第一次弄的时候,直接粘贴。第二次写的时候也一堆的错误。编译,修改了好几次才通过。那个accept()函数应该是自带的了。不用再去声明了,什么的。拿来用就是了。至于QMessageBox::Yes第一次接触,不知道是约定俗成还是有什么说法。
login1.cpp就这样就完成了。总的来说不难理解。
添加一些比较小白的内容。这个我也是现在才懂,就是第一个{}内是构造函数,第二个{}是析构函数。构造函数就是在创建对象的时候,用给定值进行初始化,而析构函数就是用来释放对象,这个暂时不用。具体内容如下:
http://yq329.blog.163.com/blog/static/117379566201142041715339/ 不过个人感觉,尽管看了很多C++的书,没有来实践,依然小白一个。
14、接下来就是要对main.cpp进行编码了。这个是关键,否则之前所用到的类就没法发挥功能了。
主函数要添加的内容其实也非常少。#include“login1.h”必须有,否则后面类成员就没有识别。
login1w;是默认的。只是w算是类login1的成员,还是类名吗?还没有搞明白。类的学习还需加强呀!改为自己想叫的名字,比如login1in;
添加第8行的welcomeh;
第11行到16行,执行登陆按钮之后的内容。
第11行用Accepted信号来判断登陆按钮是否被按下(之前的判断,若正确就能被按下,否则提示错误)。
第13行,展示welcome界面的内容。
第14行,程序一直被执行,直到主窗口关闭。这个到没有什么大的影响。记住就可以了。
15、观察执行结果
密码错误的情况:
密码正确的情况:
特别注意:
1、当我弄好了一切编译程序的时候,发现了这个错误。C1004:发现意外的文件尾,一看原来是在第27行多了一个字,真够郁闷的。后来发现,如果是少了大括号什么的,都会出现这个错误。所以说,编程真的是任何地方都需要特别谨慎。
2、也有情况就是明明跟别人的代码都一样,为什么不行呢?这个时候就要看看是不是软件或者电脑出现了问题。将自己反复命名的文件删除,或者是重启软件都是一个不错的方法。
3、代码自己多写几遍,这样思路才会特别清晰。
这个程序自己做了好几遍了,发现需要注意的问题还真是很多。继续加油了!会持续更新!