connect(pushButton_ok,SIGNAL(clicked()),this,SLOT(Login()));
}
void LoginDlg::cancel()
{
lineEdit_username->clear();
lineEdit_passwd->clear();
close();
}
LoginDlg::LoginDlg()
{
//qDebug()<<"construct_login";
initDlg();
initConnect();
}
LoginDlg::~LoginDlg()
{
delete label_username;
delete label_passwd;
delete lineEdit_username;
delete lineEdit_passwd;
delete pushButton_ok;
delete pushButton_cancel;
//qDebug()<<"desstruct_login";
}
void LoginDlg::initDlg()
{
setWindowFlags(Qt::FramelessWindowHint);
label_username = new QLabel;
label_username->setText(tr("用 户 名:"));
label_passwd = new QLabel;
label_passwd->setText(tr("用户密码:"));
lineEdit_username = new QLineEdit;
lineEdit_username->setFocus();
lineEdit_passwd = new QLineEdit;
lineEdit_passwd->setEchoMode(QLineEdit::Password);
pushButton_ok = new QPushButton;
pushButton_ok->setText(tr("确定"));
pushButton_ok->setIcon(style()->standardIcon(QStyle::SP_DialogOkButton));
pushButton_cancel = new QPushButton;
pushButton_cancel->setText(tr("取消"));
pushButton_cancel->setIcon(style()->standardIcon(QStyle::SP_DialogCancelButton));
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(label_username,0,0);
gridLayout->addWidget(lineEdit_username,0,1);
gridLayout->addWidget(label_passwd,1,0);
gridLayout->addWidget(lineEdit_passwd,1,1);
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch();
buttonLayout->addWidget(pushButton_ok);
buttonLayout->addStretch();
buttonLayout->addWidget(pushButton_cancel);
buttonLayout->addStretch();
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(gridLayout);
mainLayout->addLayout(buttonLayout);
mainLayout->addStretch();
setLayout(mainLayout);
}
void LoginDlg::initConnect()
{
connect(pushButton_cancel,SIGNAL(clicked()),this,SLOT(cancel()));
connect(pushButton_ok,SIGNAL(clicked()),this,SLOT(Login()));
}
void LoginDlg::cancel()
{
lineEdit_username->clear();
lineEdit_passwd->clear();
close();
}
LoginDlg类中initDlg、cancel方法,应用了外观模式。cancel方法运用了多态特性,覆盖了LoginDlg的父类QDialog的cancel方法,是LoginDlg类的一个私有槽函数。外观模式的应用使得构造函数更为清晰,initConnect方法更为简单。这时可以利用:
[html]
connect(pushButton_cancel,SIGNAL(clicked()),this,SLOT(cancel()));
connect(pushButton_cancel,SIGNAL(clicked()),this,SLOT(cancel()));
来取代
[html] view plaincopyprint connect(pushButton_cancel,SIGNAL(clicked()),lineEdit_username,SLOT(clear()));
connect(pushButton_cancel,SIGNAL(clicked()),lineEdit_passwd,SLOT(clear()));
connect(pushButton_cancel,SIGNAL(clicked()),this,SLOT(close()));
connect(pushButton_cancel,SIGNAL(clicked()),lineEdit_username,SLOT(clear()));
connect(pushButton_cancel,SIGNAL(clicked()),lineEdit_passwd,SLOT(clear()));
connect(pushButton_cancel,SIGNAL(clicked()),this,SLOT(close()));
将界面设计的代码从构造函数中,单独分离,也是一种好的设计方式。
*对外观模式有更好的见解,欢迎留言,交流学习。
作者:tandesir