本文章转载自www.yafeilinux.com,本人仅仅转载,不承担一切责任

三、Qt Creator登录对话框

实现功能:

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

实现原理:

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

实现过程:

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

http://www.yafeilinux.com/wp-content/uploads/2010/04/012-300x219.jpg

 

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

http://www.yafeilinux.com/wp-content/uploads/2010/04/022.jpg

 

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

http://www.yafeilinux.com/wp-content/uploads/2010/04/032-300x225.jpg

 

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

http://www.yafeilinux.com/wp-content/uploads/2010/04/042-300x68.jpg

 

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,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。

http://www.yafeilinux.com/wp-content/uploads/2010/04/052-300x243.jpg

 

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

http://www.yafeilinux.com/wp-content/uploads/2010/04/062-300x234.jpg

 

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

loginDlg::loginDlg(QWidget *parent) :

QDialog(parent),

m_ui(new Ui::loginDlg)

{

m_ui->setupUi(this);

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

}

效果如下:

http://www.yafeilinux.com/wp-content/uploads/2010/04/072-300x246.jpg

 

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

http://www.yafeilinux.com/wp-content/uploads/2010/04/082-300x250.jpg

 

我们可以更改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文件如下图:

http://www.yafeilinux.com/wp-content/uploads/2010/04/091-300x217.jpg