• 11136阅读
  • 4回复

三、Qt Creator登录对话框(原创) [复制链接]

上一主题 下一主题
离线yafei86
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-18
到我的空间查看完整的图文介绍:点这里

实现功能:

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

实现原理:

通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用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类不可用。

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文件如下图:



欢迎访问我们的网站:www.yafeilinux.com
离线wd007

只看该作者 1楼 发表于: 2009-11-26
这个不错,后面一张图没有贴出来。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线sdenven
只看该作者 2楼 发表于: 2009-12-02
顶一个!!
离线coconut8088
只看该作者 3楼 发表于: 2010-02-02
顶!运行结果呢
离线hanborn
只看该作者 4楼 发表于: 2010-03-27
m_ui 是什么?
快速回复
限100 字节
 
上一个 下一个