登录对话框的设计和实现
登录对话框
一. 需求分析
- 代码可复用
- 可以获取用户名和密码
二. 登录对话框的设计与框架
- 类图
-
LoginDialog类的封装
#ifndef LOGINDIALOG_H #define LOGINDIALOG_H #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QDialog> 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 // LOGINDIALOG_H
6.3 实验 (添加亿点点细节)
-
主函数
#include "Widget.h" #include <QApplication> #include "LoginDialog.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
-
对话框需要一个主页面,这里封装一个自己的Widget
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPushButton> 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 "ui_Widget.h" #include <QDebug> #include "LoginDialog.h" Widget::Widget(QWidget *parent) : QWidget(parent), TestBtn(this) { TestBtn.setText("Test Login Dialog"); TestBtn.move(10, 10); TestBtn.resize(180, 30); setFixedSize(200, 50); connect(&TestBtn, SIGNAL(clicked()), this, SLOT(TestBtn_Clicked())); setAttribute(Qt::WA_DeleteOnClose); } void Widget::TestBtn_Clicked() { QLoginDialog dlg; if( dlg.exec() == QDialog::Accepted ) //模态对话框 { qDebug() << "User: " + dlg.getUser(); qDebug() << "Pwd: " + dlg.getPwd(); } } Widget::~Widget() { }
-
LoginDialog类的封装和实现
#ifndef LOGINDIALOG_H #define LOGINDIALOG_H #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QDialog> 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 // LOGINDIALOG_H
#include "LoginDialog.h" #include <QDebug> #include "LoginDialog.h" 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() { }