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

  • 相关阅读:
    无法设置 / 添加网络打印机?报错 无法保持设置?
    tp剩余未验证内容-5
    再谈 iptables 防火墙的 指令配置
    tp剩余未验证内容-4
    tp剩余未验证内容-3
    CentOS7.4安装配置mysql8 TAR免安装版
    CentOS7中systemctl的使用与CentOS6中service的区别
    CentOS下如何查看并杀死僵尸进程
    CentOS SVN服务器管理多项目
    swoole+Redis实现实时数据推送
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6400913.html
Copyright © 2011-2022 走看看