免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1121 | 回复: 0
打印 上一主题 下一主题

三、Qt Creator登录对话框 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览

本文章原创于www.yafeilinux.com 转载请注明出处。

实现功能:

在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出警告对话框。

实现原理:

通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用if语句进行判断。

实现过程:

1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为Base class,这样便建立了主窗口。文件列表如下:

 

2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中。文件列表如下:

 

3.在logindlg.ui中设计下面的界面:行输入框为Line Edit。其中用户名后面的输入框在属性中设置其object Name为usrLineEdit,密码后面的输入框为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。

 

4.将exitBtn的单击后效果设为退出程序,关联如下:

 

5.右击登录按钮选择go to slot,再选择clicked(),然后进入其单击事件的槽函数,写入一句

void loginDlg::on_loginBtn_clicked()
{
accept();
}

6.改写main.cpp:

#include <QtGui/QApplication>
#include “widget.h”
#include “logindlg.h”
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
loginDlg login;
if(login.exec()==QDialog::Accepted)
{
w.show();
return a.exec();
}
else return 0;
}

7.这时执行程序,可实现按下登录按钮进入主窗口,按下退出按钮退出程序。

8.添加用户名密码判断功能。将登陆按钮的槽函数改为:

void loginDlg::on_loginBtn_clicked()

{

if(m_ui->usrLineEdit->text()==tr(“qt”)&&m_ui->pwdLineEdit->text()==tr(“123456″))

//判断用户名和密码是否正确

accept();

else{

QMessageBox::warning(this,tr(“Warning”),tr(“user name or password error!”),QMessageBox::Yes);

//如果不正确,弹出警告对话框

}

}

并在logindlg.cpp中加入#include <QtGui>的头文件。如果不加这个头文件,QMessageBox类不可用。

(说明:由于版本原因,现在的程序默认生成的ui类对象可能是ui,而不是m_ui,请到loginDlg.h中查看。)

9.这时再执行程序,输入用户名为qt,密码为123456,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。

 

如果输入错误,便会弹出警告提示框:

 

10.在logindlg.cpp的loginDlg类构造函数里,添上初始化语句,使密码显示为小黑点。

loginDlg::loginDlg(QWidget *parent) :

QDialog(parent),

m_ui(new Ui::loginDlg)

{

m_ui->setupUi(this);

m_ui->pwdLineEdit->setEchoMode(QLineEdit::Password);

}

效果如下:

 

11.如果输入如下图中的用户名,在用户名前不小心加上了一些空格,结果程序按错误的用户名对待了。

 

我们可以更改if判断语句,使这样的输入也算正确。

void loginDlg::on_loginBtn_clicked()

{

if(m_ui->usrLineEdit->text().trimmed()==tr(“qt”)&&m_ui->pwdLineEdit->text()==tr(“123456″))

accept();

else{

QMessageBox::warning(this,tr(“Warning”),tr(“user name or password error!”),QMessageBox::Yes);

}

}

加入的这个函数的作用就是移除字符串开头和结尾的空白字符。

12.最后,如果输入错误了,重新回到登录对话框时,我们希望可以使用户名和密码框清空并且光标自动跳转到用户名输入框,最终的登录按钮的单击事件的槽函数如下:

void loginDlg::on_loginBtn_clicked()

{

if(m_ui->usrLineEdit->text().trimmed()==tr(“qt”)&&m_ui->pwdLineEdit->text()==tr(“123456″))

//判断用户名和密码是否正确

accept();

else{

QMessageBox::warning(this,tr(“Warning”),tr(“user name or password error!”),QMessageBox::Yes);

//如果不正确,弹出警告对话框

m_ui->usrLineEdit->clear();//清空用户名输入框

m_ui->pwdLineEdit->clear();//清空密码输入框

m_ui->usrLineEdit->setFocus();//将光标转到用户名输入框

}

}

最终的loginDlg.cpp文件如下图:

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP