热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1、Qt登录界面(一):accept方式

一、功能描述1、输入用户名和密码进行操作2、默认用户名(qwe)和默认密码(123)加密保存到本地3、解释模式对话框&

一、功能描述

1、输入用户名和密码进行操作

2、默认用户名(qwe)和默认密码(123)加密保存到本地

3、解释模式对话框,以及exec()的用法,accept()和accepted的概念2015.6.5 qt学习笔记 accept()概念_xdlichen的专栏-CSDN博客本篇,会重点讲述模式对话框,以及exec()的用法,accept()和accepted的概念。一.非模式对话框非模式对话框是和同一个程序中其它窗口操作无关的对话框。在字处理软件中查找和替换对话框通常是非模式的来允许同时与应用程序主窗口和对话框进行交互。调用show()来显示非模式对话框。show()立即返回,这样调用代码中的控制流将会继续。在实践中你将会经常调用showhttps://blog.csdn.net/xdlichen/article/details/46374517


二、项目创建

1、新建项目,选择“Qt Widgets Application”,点击“Choose” 

2、输入项目名,选择文件路径,点击“下一步”

 3、选择“Desktop...MinGW..”,点击“下一步”

 4、文件名开头大写(个人习惯),点击“下一步” 

 5、点击“完成” 

 6、右击“LoginDialogAccept”->Add New...(添加新文件)

7、选择Qt -> Qt 设计师界面类 

8、选择"Dialog without Buttons",点击“下一步”

9、文件名开头大写,点击“下一步”

10、点击“完成”


三、界面布局

1、双击“LoginDialog.ui” 

2、 界面上拖拽一个“label”控件,,

 更改text为“登录界面”,水平居中布局“AlignHCenter”

字体大小“25”,更改控件大小使字显示完全

3、拖拽两个“label”,分别更改text为“用户名:”、“密 码:” ;再拖拽两个“lineedit”

 选中第一个lineedit,objectName更改为“usernameEdit”

 水平居中布局“AlignHCenter”

  选中第二个lineedit,objectName更改为“passwordEdit”

 echoMode为“Password”,水平居中布局“AlignHCenter”

选中四个控件,点击“在窗体布局中布局”

4、拖拽两个pushButton,第一个pushButton,objectName更改为“loginButton”,text更改为“登录”

第二个pushButton,objectName更改为“exitButton”,text更改为“退出”

选中两个pushButton,点击“水平布局” 

 5、拖拽四个"Vertical Spacer",右击界面->布局->栅格布局

 6、右击“登录”按键->转到槽->选择“clicked()”->点击“OK”

  7、右击“退出”按键->转到槽->选择“clicked()”->点击“OK”


四、代码演示

1、main.cpp

#include "MainWindow.h"
#include
#include "LoginDialog.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);LoginDialog login;if (login.exec() == QDialog::Accepted) //当用户名和密码正确时,接收到Accepted信号{MainWindow w;w.show();return a.exec();}else{return 0;}
}

2、 LoginDialog.h

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H#include namespace Ui {
class LoginDialog;
}class LoginDialog : public QDialog
{Q_OBJECTpublic:explicit LoginDialog(QWidget *parent = nullptr);~LoginDialog();private slots:void on_loginButton_clicked();void on_exitButton_clicked();private:Ui::LoginDialog *ui;QString m_qstrFileName; //文件名
};#endif // LOGINDIALOG_H

3、LoginDialog.cpp

#include "LoginDialog.h"
#include "ui_LoginDialog.h"
#include
#include
#include
#include LoginDialog::LoginDialog(QWidget *parent) :QDialog(parent),ui(new Ui::LoginDialog)
{ui->setupUi(this);//标题this->setWindowTitle("登录界面");//登录文件m_qstrFileName = QCoreApplication::applicationDirPath() + "/config.ini";//设置配置文件的目录和位置;如果没有,会自动创建QSettings setting(m_qstrFileName, QSettings::IniFormat);//如果文件不存在用户名和密码信息if (!(setting.contains(tr("login/username")) && setting.contains(tr("login/password")))){//用户名QByteArray byteUser = "qwe";QByteArray byteUserMd5 = QCryptographicHash::hash(byteUser, QCryptographicHash::Md5); //加密QString strUserMd5 = byteUserMd5.toHex();//密码QByteArray bytePwd = "123";QByteArray bytePwdMd5 = QCryptographicHash::hash(bytePwd, QCryptographicHash::Md5);QString strPwdMd5 = bytePwdMd5.toHex();//写入数据setting.beginGroup(tr("login"));//节点开始setting.setValue("username", strUserMd5); //设置key和value,也就是参数和值setting.setValue("password", strPwdMd5);}
}LoginDialog::~LoginDialog()
{delete ui;
}//登录
void LoginDialog::on_loginButton_clicked()
{if(ui->usernameEdit->text().isEmpty()){QMessageBox::critical(this, tr("提示"), tr("用户名不能为空"));return;}if(ui->passwordEdit->text().isEmpty()){QMessageBox::critical(this, tr("提示"), tr("密码不能为空"));return;}QSettings setting(m_qstrFileName, QSettings::IniFormat);//用户名QByteArray byteUser = ui->usernameEdit->text().toLatin1();QByteArray byteUserMd5 = QCryptographicHash::hash(byteUser, QCryptographicHash::Md5); //加密QString strUserMd5 = byteUserMd5.toHex(); //QByteArray 转 QString//用户名正确if (strUserMd5 == setting.value("/login/username").toString()){//密码QByteArray bytePwd = ui->passwordEdit->text().toLatin1();QByteArray bytePwdMd5 = QCryptographicHash::hash(bytePwd, QCryptographicHash::Md5);QString strPwdMd5 = bytePwdMd5.toHex();//密码正确if (strPwdMd5 == setting.value("/login/password").toString()){accept(); //用户名和密码正确发送accept()信号}else{QMessageBox::critical(this, tr("提示"), tr("密码输入错误"));ui->passwordEdit->setFocus(); //获取焦点}}else{QMessageBox::critical(this, tr("提示"), tr("用户名输入错误"));ui->usernameEdit->setFocus();}
}//退出
void LoginDialog::on_exitButton_clicked()
{//this->close();reject();
}

4、其他保持不变


五、运行测试

1、Ctrl+r,运行程序

 2、当用户名不对时

3、当密码不对时

4、当用户名和密码都对时,登录界面关闭 

 MainWindow界面显示

 5、在程序运行目录有个config.ini文件,存放着加密后的用户名和密码


六、代码下载

https://download.csdn.net/download/Viciower/36788383


推荐阅读
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • JS实现一键分享功能
    本文介绍了如何使用JS实现一键分享功能,并提供了2019独角兽企业招聘Python工程师的标准。同时,给出了分享到QQ空间、新浪微博和人人网的链接。 ... [详细]
author-avatar
灰常奈-ping__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有