登录对话框是应用程序中的常用部件,如何对其开发呢
1、登录对话框的需求分析
开发成可复用的软件部件
获取应户名和密码
附加需求:随机验证码
2、登录对话框的设计与架构
3、数据的传递
通过附加成员变量和成员函数完成不同对话框间的数据传递
4、程序代码
//Widget.h
#ifndef _WIDGET_H_
#define _WIDGET_H_
#include <QtGui/QWidget>
#include "QPushButton"
class Widget : public QWidget
{
Q_OBJECT
private:
QPushButton TestBtn;
private slots:
void TestBtn_Clicked();
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H
//QLoginDialog.h
#ifndef QLOGINDIALOG_H
#define QLOGINDIALOG_H
#include <QtGui/QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
class QLoginDialog : public QDialog
{
Q_OBJECT
private:
QLabel UserLabel; //QLabel用于图像或文字的显示,标签
QLabel PwdLabel;
QLineEdit UserEdit;
QLineEdit PwdEdit;
QPushButton LoginBtn;
QPushButton CancelBtn;
QString m_user;
QString m_pwd;
private slots:
void LoginBtn_Clicked();
void CancelBtn_Clicked();
public:
QLoginDialog(QWidget *parent = 0);
QString getUser();
QString getPwd();
~QLoginDialog();
};
#endif // QLOGINDIALOG_H
//Widget.cpp
#include "Widget.h"
#include "QLoginDialog.h"
#include "QDebug"
Widget::Widget(QWidget *parent) : QWidget(parent),TestBtn(this)
{
TestBtn.setText("Test Login Dialog");
setFixedSize(200, 50);
connect(&TestBtn, SIGNAL(clicked()),this,SLOT(TestBtn_Clicked()));
}
void Widget::TestBtn_Clicked()
{
QLoginDialog dlg;
if( dlg.exec() == QDialog::Accepted )
{
qDebug() << "User:" + dlg.getUser();
qDebug() << "Pwd:" + dlg.getPwd();
}
}
Widget::~Widget()
{
}
//QLoginDialog.cpp
#include "QLoginDialog.h"
#include <QDebug>
QLoginDialog::QLoginDialog(QWidget* parent) : QDialog(parent, Qt::WindowCloseButtonHint),
UserLabel(this), PwdLabel(this), UserEdit(this),PwdEdit(this),LoginBtn(this),CancelBtn(this)
{
UserLabel.setText("User ID:");
UserLabel.move(20, 30);
UserLabel.resize(60, 25);
UserEdit.move(85, 30);
UserEdit.resize(180, 25);
PwdLabel.setText("Password:");
PwdLabel.move(20, 65);
PwdLabel.resize(60,25);
PwdEdit.move(85, 65);
PwdEdit.resize(180, 25);
PwdEdit.setEchoMode(QLineEdit::Password); //用星号代替密码显示
CancelBtn.setText("Cancel");
CancelBtn.move(85, 110);
CancelBtn.resize(85,30);
LoginBtn.setText("Login");
LoginBtn.move(180,110);
LoginBtn.resize(85,30);
setWindowTitle("Login");
setFixedSize(285, 170); //固定窗口大小
connect(&LoginBtn, SIGNAL(clicked()), this, SLOT(LoginBtn_Clicked()));
connect(&CancelBtn, SIGNAL(clicked()), this, SLOT(CancelBtn_Clicked()));
}
void QLoginDialog::LoginBtn_Clicked()
{
qDebug() << "LoginBtn_Clicked() Begin";
m_user = UserEdit.text().trimmed();
m_pwd = PwdEdit.text();
done(Accepted); //当前已登录
qDebug() << "LoginBtn_Clicked() End";
}
void QLoginDialog::CancelBtn_Clicked()
{
qDebug() << "CancelBtn_Clicked() Begin";
done(Rejected); //当前已取消
qDebug() << "CancelBtn_Clicked() End";
}
QString QLoginDialog::getUser()
{
return m_user;
}
QString QLoginDialog::getPwd()
{
return m_pwd;
}
QLoginDialog::~QLoginDialog()
{
}
//main.cpp
#include <QtGui/QApplication>
#include "Widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
本程序进一步优化的方向:
检查用户名是否为空,为空时提示错误
加入随机验证码,当验证码输入错误时进行提示
验证码随机刷新