LoginDlg.h:
#ifndef LOGINDLG_H_
#define LOGINDLG_H_
#include <QDialog>
class QLineEdit;
class LoginDlg : public QDialog
{
Q_OBJECT
public:
LoginDlg(QWidget *parent = 0);
~LoginDlg();
private slots:
virtual void accept();
private:
QLineEdit *m_pUserLineEdit;
QLineEdit *m_pPwdLineEdit;
};
#endif // LOGINDLG_H_
LoginDlg.cpp:
#include "LoginDlg.h"
#include <QLabel>
#include <QLineEdit>
#include "GBK.h"
#include <QGridLayout>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMessageBox>
LoginDlg::LoginDlg(QWidget *parent)
: QDialog(parent)
{
QLabel *pUserLabel = new QLabel(GBK::ToUnicode("用户名:"));
QLabel *pPwdLabel = new QLabel(GBK::ToUnicode("密 码:"));
m_pUserLineEdit = new QLineEdit;
m_pPwdLineEdit = new QLineEdit;
//设置输入框回显样式
m_pPwdLineEdit->setEchoMode(QLineEdit::Password);
//创建网格布局管理器
QGridLayout *pGridLayout = new QGridLayout;
//(0, 0, 1, 1) => (行, 列, 行跨度, 列跨度)
pGridLayout->addWidget(pUserLabel, 0, 0, 1, 1);
pGridLayout->addWidget(m_pUserLineEdit, 0, 1, 1, 3);
pGridLayout->addWidget(pPwdLabel, 1, 0, 1, 1);
pGridLayout->addWidget(m_pPwdLineEdit, 1, 1, 1, 3);
QPushButton *pOkBtn = new QPushButton(GBK::ToUnicode("确定"));
QPushButton *pCancelBtn = new QPushButton(GBK::ToUnicode("取消"));
//水平布局
QHBoxLayout *pBtnLayout = new QHBoxLayout;
//设置确定和取消两个按钮之间的间隔为60
pBtnLayout->setSpacing(60);
pBtnLayout->addWidget(pOkBtn);
pBtnLayout->addWidget(pCancelBtn);
//垂直布局管理器
QVBoxLayout *pDlgLayout = new QVBoxLayout;
//设置pDlgLayout的边框宽度为40,即pDlgLayout内部子窗口到pDlgLayout边框的距离为40
pDlgLayout->setMargin(40);
pDlgLayout->addLayout(pGridLayout);
//pGridLayout到pBtnLayout之间的距离为40
pDlgLayout->addStretch(40);
pDlgLayout->addLayout(pBtnLayout);
setLayout(pDlgLayout);
connect(pOkBtn, SIGNAL(clicked()), this, SLOT(accept()));
connect(pCancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
setWindowTitle(GBK::ToUnicode("登录"));
resize(300,200);
}
LoginDlg::~LoginDlg()
{
}
void LoginDlg::accept()
{
if (m_pUserLineEdit->text() == "123" && m_pPwdLineEdit->text() == "123")
{
QDialog::accept();
}
else
{
QMessageBox::warning(this, GBK::ToUnicode("警告"),
GBK::ToUnicode("用户名或密码错误!"), QMessageBox::Yes);
m_pUserLineEdit->setFocus();
}
}
main.cpp:
#include <QtGui/QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout> //垂直布局
#include "LoginDlg.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LoginDlg loginDlg;
if (loginDlg.exec() == QDialog::Accepted)
{
QWidget *pWidget = new QWidget();
pWidget->show();
}
else
{
return 0;
}
return a.exec();
}
运行结果:
备注: