zoukankan      html  css  js  c++  java
  • LOGIN Dialogue of Qt

    自定义类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();
    
    }
    
  • 相关阅读:
    去掉字符串中的空格
    在线工具和云服务推荐
    Tomcat 8080端口被占用解决方法
    MySQL 相关总结
    去除Jsp页面空白行
    linux 常用命令
    最近面试Android的一些面试题
    Android动态加载Activity原理
    Android动态资源加载原理和应用
    利用DexClassLoader动态加载dex文件
  • 原文地址:https://www.cnblogs.com/johnpher/p/2658761.html
Copyright © 2011-2022 走看看