1.登录对话框是应用程序中的常见部件,如何开发一个可以在不同项目间复用的登录对话框?
Widget.h
#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
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 dig;
if( dig.exec() == QDialog::Accepted )
{
qDebug() << "Login!!";
}
}
Widget::~Widget()
{
}
QLogindialog.h
#ifndef QLOGINDIALOG_H
#define QLOGINDIALOG_H
#include <QMainWindow>
#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;
private slots:
void LoginBtn_Clicked();
void CancelBtn_Clicked();
public:
QLoginDialog(QWidget* parent = 0);
~QLoginDialog();
};
#endif // QLOGINDIALOG_H
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, 25);
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";
done(Accepted);
qDebug() << "LoginBtn_Clicked() End";
}
void QLoginDialog::CancelBtn_Clicked()
{
qDebug() << "CancelBtn_Clicked() Begin";
done(Rejected);
qDebug() << "CancelBtn_Clicked() End";
}
QLoginDialog::~QLoginDialog()
{
}
问题一:如何获取用户输入的用户名和密码?如何在两个不同的对话框间传递数据?
通过附加的成员变量和成员函数完成不同对话框间的数据传递!
在QLoginDialog类中添加成员变量m_user和m_pwd
QLoginDialog.h
#ifndef QLOGINDIALOG_H
#define QLOGINDIALOG_H
#include <QMainWindow>
#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 // QLOGINDIALOG_H
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, 25);
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(); //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()
{
}
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 dig;
if( dig.exec() == QDialog::Accepted )
{
qDebug() << "User: "+dig.getUser();
qDebug() << "Pwd: "+dig.getPwd();
}
}
Widget::~Widget()
{
}