ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Qt】Qt登录对话框(纯代码实现)

2021-03-22 16:03:36  阅读:302  来源: 互联网

标签:LoginDialog Qt 登录 对话框 QLineEdit tr QPushButton include QLabel


00. 目录

文章目录

01. 概述

实现登录对话框。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 程序设计

3.1 新建Qt Widgets Application,项目名称为3Login,在类信息页面保持类名和基类为MainWindow和QMainWindow不变,取消选择创建界面选项,如下图所示。
在这里插入图片描述

3.2 **创建登录对话框类。**往项目中添加新文件,模板选择C++分类中的C++ Class,如下图所示。
在这里插入图片描述

在类定义页面,将类名设置为LoginDialog,基类选择Custom定制,然后手动设置为QDialog。如下图所示。
在这里插入图片描述

设置完成后,先打开logindialog.h文件,将其内容修改如下图所示。

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>

class QLabel;
class QLineEdit;
class QPushButton;


class LoginDialog : public QDialog
{
    Q_OBJECT
public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();


private:
    QLabel *userLabel;
    QLabel *pwdLabel;

    QLineEdit *userEditLine;
    QLineEdit *pwdEditLine;

    QPushButton *loginBtn;
    QPushButton *exitBtn;
};

#endif // LOGINDIALOG_H

先添加了QDialog类的头文件,然后前置声明了QLabel、QLineEdit和QPushButton类,这是因为在下面只是定义了这些类对象的指针,并不需要该类完整的定义,所以可以将它们的包含语句放到源文件中进行。在LoginDialog类声明的开始需要添加Q_OBJECT宏才能使用信号和槽等元对象系统功能。在private部分定义了一些界面上需要的部件对象的指针。下面到logindialog.cpp文件中对这些部件对象进行初始化,其内容如下图所示。

#include "logindialog.h"

#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QMessageBox>

LoginDialog::LoginDialog(QWidget *parent):QDialog(parent)
{
    userLabel = new QLabel(this);
    userLabel->move(70, 80);
    userLabel->setText(tr("用户名"));

    userEditLine = new QLineEdit(this);
    userEditLine->move(140, 80);
    userEditLine->setPlaceholderText(tr("请输入用户名"));

    pwdLabel = new QLabel(this);
    pwdLabel->move(70, 130);
    pwdLabel->setText(tr("密码"));

    pwdEditLine = new QLineEdit(this);
    pwdEditLine->move(140, 130);
    pwdEditLine->setPlaceholderText(tr("请输入密码"));

    loginBtn = new QPushButton(this);
    loginBtn->move(50, 200);
    loginBtn->setText(tr("登录"));

    exitBtn = new QPushButton(this);
    exitBtn->move(210, 200);
    exitBtn->setText(tr("退出"));

}

LoginDialog::~LoginDialog()
{

}

这里定义了构造函数和析构函数,在构造函数中对界面部件进行了初始化,设置了它们的位置及要显示的文本,这些代码实现的效果与前面在设计模式设置部件实现的效果是一样的。简单举例:move(70, 80)就是将部件左上角的坐标设置为(70, 80),这个坐标是父窗口部件的,这里就是登录对话框,对话框的左上角是(0, 0)点;setText()就是设置显示文本;setPlaceholderText()是设置占位符文本。

3.3 修改main.cpp文件

下面打开main.cpp文件,在其中使用登录对话框,更改代码如下图所示

#include "mainwindow.h"

#include <QApplication>
#include "logindialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    LoginDialog dlg;

    if (dlg.exec() == QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else
    {
        return 0;
    }

}

运行程序执行结果如下:
在这里插入图片描述

3.4 登录功能实现

首先在logindialog.h文件的类声明的最后添加如下代码:

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>

class QLabel;
class QLineEdit;
class QPushButton;


class LoginDialog : public QDialog
{
    Q_OBJECT
public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();

//槽函数
private slots:
    void login();

private:
    QLabel *userLabel;
    QLabel *pwdLabel;

    QLineEdit *userEditLine;
    QLineEdit *pwdEditLine;

    QPushButton *loginBtn;
    QPushButton *exitBtn;
};

#endif // LOGINDIALOG_H

下面打开logindialog.cpp文件,在构造函数的最后添加如下图所示的两行代码。

    //信号与槽关联
    connect(loginBtn, &QPushButton::clicked, this, &LoginDialog::login);
    connect(exitBtn, &QPushButton::clicked, this, &LoginDialog::close);

下面在logindialog.cpp文件最后添加槽的定义

void LoginDialog::login()
{
    //判断用户名和密码是否正确
    if (userEditLine->text().trimmed() == tr("tom") &&
            pwdEditLine->text() == tr("123456"))
    {
        accept();
    }
    else
    {
        QMessageBox::warning(this, tr("警告"), tr("用户名或者密码错误"), QMessageBox::Yes);
    }

    userEditLine->clear();
    pwdEditLine->clear();
    userEditLine->setFocus();
}

04. 程序测试

05. 预留

06. 附录

源码下载:

标签:LoginDialog,Qt,登录,对话框,QLineEdit,tr,QPushButton,include,QLabel
来源: https://blog.csdn.net/dengjin20104042056/article/details/115082243

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有