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(); }
运行结果:
备注: