Qt中登录对话框的开发

来源:互联网 发布:matlab 内置函数源码 编辑:程序博客网 时间:2024/06/03 16:28

登录对话框是应用程序中的常用部件,如何对其开发呢
1、登录对话框的需求分析
开发成可复用的软件部件
获取应户名和密码
附加需求:随机验证码
2、登录对话框的设计与架构
这里写图片描述
3、数据的传递
通过附加成员变量和成员函数完成不同对话框间的数据传递
这里写图片描述

4、程序代码

//Widget.h#ifndef _WIDGET_H_#define _WIDGET_H_#include <QtGui/QWidget>#include "QPushButton"class Widget : public QWidget{    Q_OBJECTprivate:    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_OBJECTprivate:    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();}

本程序进一步优化的方向:
检查用户名是否为空,为空时提示错误
加入随机验证码,当验证码输入错误时进行提示
验证码随机刷新

原创粉丝点击