第十八课、登录对话框实例分析------------------狄泰软件学院

一、登录对话框

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
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()
{

}
QLoginDialog.cpp
#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
QWidget.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()
{
    
}
Widget.cpp
#include <QtGui/QApplication>
#include "Widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    
    return a.exec();
}
main.cpp

二、进一步开发

1、检查用户名和密码是否为空

(1)、当用户名或密码为空时提示错误

2、随机验证码

(1)、当验证码输入错误时进行提示

(2)、验证码随机刷新

三、小结

(1)、登录对话框作为可复用的软件部件进行开发

(2)、对话框之间通过成员变量和成员函数传递数据

A、将用户数据保存在私有成员变量中

B、通过公有函数进行数据传递

posted @ 2017-02-15 12:33  lgc202  阅读(620)  评论(0编辑  收藏  举报