当前位置: 首页 > news >正文

登录对话框的设计和实现

登录对话框

一. 需求分析

  1. 代码可复用
  2. 可以获取用户名和密码

二. 登录对话框的设计与框架

  1. 类图
QDialog QLoginDialog QPushButton QLabel QLineEdit
  1. LoginDialog类的封装

    #ifndef LOGINDIALOG_H
    #define LOGINDIALOG_H
    
    #include <QLabel>
    #include <QLineEdit>
    #include <QPushButton>
    #include <QDialog>
    
    
    class QLoginDialog : public QDialog
    {
        Q_OBJECT
    private:
        QLabel UserLabel;
        QLabel PwdLabel;
        QLineEdit UserEdit;
        QLineEdit PwdEdit;
        QPushButton LoginBtn;
        QPushButton CancelBtn;
        QString m_user;
        QString m_pwd;
    private slots:
        void LoginBtn_Clicked();
        void CancelBtn_Clicked();
    public:
        QLoginDialog(QWidget *parent = 0);
        QString getUser();
        QString getPwd();
        ~QLoginDialog();
    };
    
    #endif // LOGINDIALOG_H
    
    

6.3 实验 (添加亿点点细节)

请添加图片描述

  1. 主函数

    #include "Widget.h"
    
    #include <QApplication>
    #include "LoginDialog.h"
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
        return a.exec();
    }
    
    
  2. 对话框需要一个主页面,这里封装一个自己的Widget

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    private:
        QPushButton TestBtn;
    private slots:
        void TestBtn_Clicked();
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    };
    
    #endif // WIDGET_H
    
    
    #include "Widget.h"
    #include "ui_Widget.h"
    
    #include <QDebug>
    #include "LoginDialog.h"
    Widget::Widget(QWidget *parent) : QWidget(parent), TestBtn(this)
    {
        TestBtn.setText("Test Login Dialog");
        TestBtn.move(10, 10);
        TestBtn.resize(180, 30);
        setFixedSize(200, 50);
    
        connect(&TestBtn, SIGNAL(clicked()), this, SLOT(TestBtn_Clicked()));
    
        setAttribute(Qt::WA_DeleteOnClose);
    }
    
    void Widget::TestBtn_Clicked()
    {
        QLoginDialog dlg;
    
        if( dlg.exec() == QDialog::Accepted )  //模态对话框
        {
            qDebug() << "User: " + dlg.getUser();
            qDebug() << "Pwd: " + dlg.getPwd();
        }
    }
    
    Widget::~Widget()
    {
    
    }
    
    
  3. LoginDialog类的封装和实现

    #ifndef LOGINDIALOG_H
    #define LOGINDIALOG_H
    
    #include <QLabel>
    #include <QLineEdit>
    #include <QPushButton>
    #include <QDialog>
    
    
    class QLoginDialog : public QDialog
    {
        Q_OBJECT
    private:
        QLabel UserLabel;
        QLabel PwdLabel;
        QLineEdit UserEdit;
        QLineEdit PwdEdit;
        QPushButton LoginBtn;
        QPushButton CancelBtn;
        QString m_user;
        QString m_pwd;
    private slots:
        void LoginBtn_Clicked();
        void CancelBtn_Clicked();
    public:
        QLoginDialog(QWidget *parent = 0);
        QString getUser();
        QString getPwd();
        ~QLoginDialog();
    };
    
    #endif // LOGINDIALOG_H
    
    
    #include "LoginDialog.h"
    
    #include <QDebug>
    #include "LoginDialog.h"
    QLoginDialog::QLoginDialog(QWidget* parent) : QDialog(parent, Qt::WindowCloseButtonHint),
        UserLabel(this), PwdLabel(this), UserEdit(this), PwdEdit(this), LoginBtn(this), CancelBtn(this)
    {
        UserLabel.setText("User ID:");
        UserLabel.move(20, 30);
        UserLabel.resize(60, 25);
    
        UserEdit.move(85, 30);
        UserEdit.resize(180, 25);
    
        PwdLabel.setText("Password:");
        PwdLabel.move(20, 65);
        PwdLabel.resize(60,25);
    
        PwdEdit.move(85, 65);
        PwdEdit.resize(180, 25);
        PwdEdit.setEchoMode(QLineEdit::Password);
    
        CancelBtn.setText("Cancel");
        CancelBtn.move(85, 110);
        CancelBtn.resize(85, 30);
    
        LoginBtn.setText("Login");
        LoginBtn.move(180, 110);
        LoginBtn.resize(85, 30);
    
        setWindowTitle("Login");
        setFixedSize(285, 170);
    
    //消息映射
        connect(&LoginBtn, SIGNAL(clicked()), this, SLOT(LoginBtn_Clicked()));
        connect(&CancelBtn, SIGNAL(clicked()), this, SLOT(CancelBtn_Clicked()));
    }
    
    void QLoginDialog::LoginBtn_Clicked()
    {
        qDebug() << "LoginBtn_Clicked() Begin";
    
        m_user = UserEdit.text().trimmed();
        m_pwd = PwdEdit.text();
    
        done(Accepted);
    
        qDebug() << "LoginBtn_Clicked() End";
    }
    
    void QLoginDialog::CancelBtn_Clicked()
    {
        qDebug() << "CancelBtn_Clicked() Begin";
    
        done(Rejected);
    
        qDebug() << "CancelBtn_Clicked() End";
    }
    
    QString QLoginDialog::getUser()
    {
        return m_user;
    }
    
    QString QLoginDialog::getPwd()
    {
        return m_pwd;
    }
    
    QLoginDialog::~QLoginDialog()
    {
    
    }
    
    
    

相关文章:

  • Qt中的标准对话框
  • 布局管理器
  • Qt工程添加资源文件(例如:图标)
  • 主窗口 (QMainWindow)
  • C++中的explicit
  • Qt中的事件处理
  • 使用二阶构造实现计算器页面的构造过程
  • Linux内核的CodingStyle
  • 常见面试题及面试准备阶段要思考的问题
  • Qt中事件的传递过程
  • Qt事件初探-发现事件
  • Qt中TCP通信的实现
  • ubuntu下MQTT的移植安装
  • MQTT协议 发布/订阅 机制初探 - (模拟物联网传感器设备和控制模块间的通信)
  • MQTT初探
  • [译]前端离线指南(上)
  • Android 控件背景颜色处理
  • javascript 哈希表
  • Java的Interrupt与线程中断
  • PHP那些事儿
  • python3 使用 asyncio 代替线程
  • React Transition Group -- Transition 组件
  • session共享问题解决方案
  • Vue ES6 Jade Scss Webpack Gulp
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 阿里云Kubernetes容器服务上体验Knative
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 看域名解析域名安全对SEO的影响
  • 聊聊flink的TableFactory
  • 7行Python代码的人脸识别
  • mysql面试题分组并合并列
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云服务器购买完整流程
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​【已解决】npm install​卡主不动的情况
  • ​Linux·i2c驱动架构​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #QT(TCP网络编程-服务端)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (2)(2.10) LTM telemetry
  • (pytorch进阶之路)扩散概率模型
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • 、写入Shellcode到注册表上线
  • .naturalWidth 和naturalHeight属性,
  • .NET 5种线程安全集合
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化