zoukankan      html  css  js  c++  java
  • 第十八课、登录对话框实例分析------------------狄泰软件学院

    一、登录对话框

    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、通过公有函数进行数据传递

  • 相关阅读:
    原生JavaScript封装insertAfter方法
    SQL截取最后一个由字符分隔的字符串
    给标识列显示的添加数据(IDENTITY_INSERT 为 ON)
    C#保留两位小数,四舍五入的函数及使用方法
    UEditor1.4.3上传图片提示上传失败
    SQL Server 2005公用表表达式(CTE)
    UEditor 粘贴表格时报错导致无法粘贴的解决方法
    事件监听机制
    数组中的趣味题(一)
    redis的工具类封装
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6400913.html
Copyright © 2011-2022 走看看