自定义类CLoginDlg,继承QDialog
logindlg.h//对CLoginDlg的声明,包括构造函数的声明,成员函数,成员变量的声明
#ifndef LOGINDLG_H

#define LOGINDLG_H

#include <QtGui/QDialog>

class QLineEdit;//注意:这是类CLineEdit的传递声明,因为在下面使用到了CLineEdit对象指针

class CLoginDlg : public QDialog

{

Q_OBJECT

public:

CLoginDlg(QWidget* = 0);//构造函数的声明,QWidget是它的顶级父类

virtual ~CLoginDlg();

public slots:

virtual void accept();//从新声明基类QDialog的虚函数accept(),在cpp文件中将重写此函数

private:

QLineEdit* usrLineEdit;

QLineEdit* pwdLineEdit;

};

#endif // LOGINDLG_H


logindlg.cpp

#include "logindlg.h"

#include <QtGui/QtGui>

CLoginDlg::CLoginDlg(QWidget* parent)

: QDialog(parent)//CLoginDlg类的构造函数

{

QLabel* usrLabel = new QLabel(tr("用户名:"));//创建一个QLabel的指针对象,名为"用户名"

QLabel* pwdLabel = new QLabel(tr("密 码:"));//创建一个QLabel的指针对象,名为"密码"

usrLineEdit = new QLineEdit;//usrLineEdit已在头文件中声明,为QLineEdit类的指针对象

pwdLineEdit = new QLineEdit;//pwdLineEdit已在头文件中声明,为QLineEdit类的指针对象

pwdLineEdit->setEchoMode(QLineEdit::Password);//设置pwdLineEdit的现实方式

///////////////////////////////////////////////////////////////////////

QGridLayout* gridLayout = new QGridLayout;

gridLayout->addWidget(usrLabel, 0, 0, 1, 1);

gridLayout->addWidget(usrLineEdit, 0, 1, 1, 3);

gridLayout->addWidget(pwdLabel, 1, 0, 1, 1);

gridLayout->addWidget(pwdLineEdit, 1, 1, 1, 3);//创建一个网格布局管理器指针对象gridLayout,并将usrLabel,usrLineEdit,pwdLabel,pwdLineEdit 放入此网格管理器

///////////////////////////////////////////////////////////////////////

QPushButton* okBtn = new QPushButton(tr("确定"));

QPushButton* cancelBtn = new QPushButton(tr("取消"));

QHBoxLayout* btnLayout = new QHBoxLayout;

btnLayout->setSpacing(60);

btnLayout->addWidget(okBtn);

btnLayout->addWidget(cancelBtn);

QVBoxLayout* dlgLayout = new QVBoxLayout;

dlgLayout->setMargin(40);

dlgLayout->addLayout(gridLayout);

dlgLayout->addStretch(40);

dlgLayout->addLayout(btnLayout);

setLayout(dlgLayout);

//创建按钮指针对象okBtn和cancelBtn,创建水平布局管理器指针对象btnLayout,垂直布局管理//器指针对象dlgLayout,并进行一些设置

///////////////////////////////////////////////////////////////////////

connect(okBtn, SIGNAL(clicked()), this, SLOT(accept()));

connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));

//信号与槽的关联

///////////////////////////////////////////////////////////////////////

setWindowTitle(tr("登录"));

resize(300, 200);

}

CLoginDlg::~CLoginDlg()//析构函数

{

delete usrLineEdit;

delete pwdLineEdit;

}

void CLoginDlg::accept()//重写accept()函数

{

if(usrLineEdit->text().trimmed() == tr("xuri")

&& pwdLineEdit->text() == tr("123"))

{

QDialog::accept();

}

else

{

QMessageBox::warning(this,

tr("警告"),

tr("用户或密码错误!"),

QMessageBox::Yes);

usrLineEdit->setFocus();

}

}

 

main.cpp

#include <QtGui/QtGui>

#include "logindlg.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));

CLoginDlg dlg;

return dlg.exec();

}

 

 posted on 2012-08-27 16:22  Jiang, X.  阅读(515)  评论(0编辑  收藏  举报