Qt 登录对话框显示

     今天我们来讲一讲Qt中对话框的使用,通过本篇博客你会学会如何编写一个简单的对话框,我们以最常见的登录对话框为例。

      首先,要强调的是,QDialog是所有Qt对话框窗口的基类,它继承自QWidget。我们自定义一个对话框类CLoginDlg,很明显它要继承自QDialog,因此必须包含基类QDialog的定义。

#ifndef LOGINDLG_H
#define LOGINDLG_H

#include <QtGui/QDialog>
class QLineEdit;
class CLoginDlg : public QDialog
{
    Q_OBJECT
public:
    CLoginDlg(QWidget* = 0);

public slots:
    virtual void accept();  //虚函数,点击确定按钮之后的接受函数

private:
    QLineEdit* usrLineEdit;  //输入用户名的框
    QLineEdit* pwdLineEdit;  //输入密码的框
};

#endif // LOGINDLG_H

以上属于CLoginDlg类的声明,我们把它放在logindlg.h文件中。

然后,我们还需要创建一个logindlg.cpp文件,用来实现类中的方法,这里主要是基类中的方法和CLoginDig中的accept()方法。本质上说,就是实现一个登录对话框界面的布局,里面涉及到了Qt中的控件。

#include <QtGui/QtGui>
#include "logindlg.h"

CLoginDlg::CLoginDlg(QWidget * parent)
    : QDialog(parent)
{
    QLabel *usrLabel = new QLabel(trUtf8("用户名:"));
    QLabel *pwdLabel = new QLabel(trUtf8("密码:"));
    usrLineEdit = new QLineEdit;
    pwdLineEdit = new QLineEdit;
    pwdLineEdit->setEchoMode(QLineEdit::Password);

    //布局
    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(usrLabel,0,0,1,1);
    gridLayout->addWidget(pwdLabel,1,0,1,1);
    gridLayout->addWidget(usrLineEdit,0,1,1,3);
    gridLayout->addWidget(pwdLineEdit,1,1,1,3);

    QPushButton* okBtn = new QPushButton(trUtf8("确定"));
    QPushButton* cancelBtn = new QPushButton(trUtf8("取消"));
    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);

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

    setWindowTitle(trUtf8("登录"));
    resize(300,200);
}

void CLoginDlg::accept()
{
    if(usrLineEdit->text().trimmed() == tr("lcf") && pwdLineEdit->text() == tr
            ("lcf"))
    {
        QDialog::accept();
    }
    else
    {
        QMessageBox::warning(this,trUtf8("警告"),trUtf8("用户名或密码错误"),
                             QMessageBox::Yes);
        usrLineEdit->setFocus();
    }
}

最后一个accept()函数就是判断用户名密码是否匹配正确,能否接受。

主函数main()中的代码如下,主要是声明了一个CLoginDig对象,并进入了对话框对象dlg的事件循环。当登录对话框结束运行完毕之后将返回它的运行结果。注意:Qt GUI程序必须有且仅有一个QApplication对象,但是可以不启动Qt应用程序QApplication对象的事件循环。

#include <QApplication>
#include <QtGui/QtGui>
#include <logindlg.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CLoginDlg dlg;
    dlg.exec();
}

最后运行的结果如下:(程序中设定,用户名、密码都为lcf)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值