一、登录对话框
1、登录对话框的需求分析
(1)、可复用软件部件(不同项目中都可以使用)
(2)、获取用户名和密码
(3)、附加需求:随机验证码
2、登录对话框的架构与设计
3、获取用户名和密码及数据在两个不同对话框之间传递
(1)、通过附加的成员变量和成员函数完成不同对话框间的数据传递
#ifndef QLOGINDIALOG_H #define QLOGINDIALOG_H #include <QDialog> #include <QLabel> #include <QLineEdit> #include <QPushButton> class QLoginDialog : public QDialog { Q_OBJECT private: QLabel UserLabel; 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
#include "QLoginDialog.h" QLoginDialog::QLoginDialog(QWidget* parent) : QDialog(parent), UserLabel(this), PwdLabel(this), UserEdit(this), PwdEdit(this), LoginBtn(this), CancelBtn(this) { UserLabel.setText("User ID:"); UserLabel.move(20, 30); UserLabel.resize(60, 25); PwdLabel.setText("Passwd:"); PwdLabel.move(20, 65); PwdLabel.resize(60, 25); UserEdit.move(85, 30); UserEdit.resize(180, 25); PwdEdit.move(85, 65); PwdEdit.resize(180, 25); PwdEdit.setEchoMode(QLineEdit::Password);//输入密码时以星号显示 LoginBtn.setText("Login"); LoginBtn.move(180, 110); LoginBtn.resize(85, 30); CancelBtn.setText("Canlel"); CancelBtn.move(85, 110); CancelBtn.resize(85, 30); setWindowTitle("Login"); setFixedSize(285, 170);//固定窗口大小 connect(&CancelBtn, SIGNAL(clicked()), this, SLOT(CancelBtn_clicked())); connect(&LoginBtn, SIGNAL(clicked()), this, SLOT(LoginBtn_clicked())); } void QLoginDialog::LoginBtn_clicked() { m_user = UserEdit.text().trimmed();//保存用户名和密码并将前后空格去掉 m_pwd = PwdEdit.text(); done(Accepted); } void QLoginDialog::CancelBtn_clicked() { done(Rejected); } QString QLoginDialog::getUser() { return m_user; } QString QLoginDialog::getPwd() { return m_pwd; } QLoginDialog::~QLoginDialog() { }
#ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <QPushButton> #include "QLoginDialog.h" class Widget : public QWidget { Q_OBJECT private: QPushButton TestBtn; private slots: void TestBtn_clicked(); public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_H
#include "Widget.h" #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent), TestBtn(this) { TestBtn.setText("TestBtn"); setFixedSize(200, 50); connect(&TestBtn, SIGNAL(clicked()), this, SLOT(TestBtn_clicked())); } void Widget::TestBtn_clicked() { QLoginDialog qld; if(qld.exec() == QDialog::Accepted) { qDebug() << "User:" << qld.getUser(); qDebug() << "Pwd:" << qld.getPwd(); } } Widget::~Widget() { }
#include <QtGui/QApplication> #include "Widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
二、进一步开发
1、检查用户名和密码是否为空
(1)、当用户名或密码为空时提示错误
2、随机验证码
(1)、当验证码输入错误时进行提示
(2)、验证码随机刷新
三、小结
(1)、登录对话框作为可复用的软件部件进行开发
(2)、对话框之间通过成员变量和成员函数传递数据
A、将用户数据保存在私有成员变量中
B、通过公有函数进行数据传递