Qt基础教程之登录窗体Splash窗口设计

3、QLabel组件,在资源文件里载入图片,为QLabel组件的pixmap指定图片.对话框下方是用于用户名和密码输入的QLineEdit组件,两个按钮用于选择用户输入,设置“取消按钮的clicked.信号与对话框的reject()槽函数关联.但是“确定按钮的clicked.信号不要设置为与对话框的任何槽函数关联,需要对其编写自定义的槽函数代码,由于需要根据用户输入确定对话框返回结果.为对话框界面上的组件设置好布局.下面是qdlglogin.h文件中QDlgLogin类的定义:1.classQDlgLogin:publicQDialog2.3.Q_OBJECT4.privat

4、e:5.boolm_moving=false;表示窗口是否在鼠标操作下移动6.QPointm_lastPos;上一次的鼠标位置7.QStringm_user=user;/初始化用户名8.QStringm_pswd=12345;/初始化密码,未加密的9.intm_tryCount=0;/试错次数10.voidreadSettings();/读取设置,从注册表11.voidwriteSettings();写入设置,从注册表12.QStringencrypt(constQString&str);/字符串加密13.protected:14.

5、用于鼠标拖动窗口的鼠标事件操作15.voidmousePressEvent(QMouseEvent*event);16.voidmouseMoveEvent(QMouseEvent*event);17.voidmouseReleaseEvent(QMouseEvent*event);18.public:19.explicitQDlgLogin(QWidget*parent=0);20.QDlgLogin();21.privateslots:22.voidon_btnOK_clicked();OK按键23.private:24.Ui:dlgLogin

6、*ui;25.;在QDlgLogin类中,定义了一些私有成员变量:m_moving和m_lastPos用于在拖动窗口时记录移动状态和上次的位置,由于Splash窗口没看标题栏,所以采用在图片上拖拉的方式移动窗口,使用了3个鼠标事件来实现窗口拖动操作.m_user,m_pswd,m_tryCount用于记录用户名、密码和试错次数.readSettings()用于读取存储的设置,writeSettings()用于将设置存储,在Windows系统下,这些信息是存储在注册表里的.encrypt()函数用于对一个字符串进行加密.QDlgLogin类功能实现构造函数里的初始化

7、QDlgLogin类的构造函数代码如下:1.QDlgLogin:QDlgLogin(QWidget*parent):2.QDialog(parent),3.ui(newUi:dlgLogin)4.5.ui-setupUi(this);6.7.ui-editPSWD-setEchoMode(QLineEdit:Password);/密码输入编辑框设置为密码输入模式8.this-setAttribute(Qt:WA_DeleteOnClose);/设置为关闭时删除9.this-setWindowFlags(Qt:SplashScreen);设置为SplashScre

8、en,窗口无边框,不在任务栏显示10./this-setWindowFlags(Qt:FramelessWindowHint);/无边框,但是在任务显示对话框标题11.readSettings();/读取存储的用户名和密码12.QLineEdit:setEchoMode()函数设置编辑框回显方式,参数为QLineEdit二EchoMode枚举类型,这里设置为QLineEditiPassword回显方式,用于将密码输入回显为一个符号,而不显示真实字符.使用setWindowFlags()函数将窗口标志设置为Qt:SplashScreen,这样对话框显示为Splash窗口,无边

9、框,且在Windows任务栏上没有显示.另外一个类似的标志是Qt:FramelessWindowHint,它会使对话框无边框,但是会在任务栏上显示对话框的标题.初始设置后调用readSettings()函数读取存储的设置,根据存储的情况将用户名显示到窗口上的编辑框里.应用程序设置的存储自定义成员函数readSettings()用于读取应用程序设置,writeSettings()用于保存设置,实现代码如下:1.voidQDlgLogin二readSettings()2.读取存储的用户名和密码,密码是经过加密的3.QStringorganization=WWB-Qt;用于注册表

10、,4.QStringappName=samp6_5;HKEY_CURRENT_USER/Software/WWB-Qt/amp6_55.QSettingssettings(organization,appName);/创立6.boolsaved=settings.value(saved,false).toBool();/读取saved键的值7.m_user=settings.value(Username,user).toString();/读取Username键的值,缺省为user8.QStringdefaultPSWD=encrypt(12345);/

11、缺省密码12345加密后的数据9.m_pswd=settings.value(PSWD,defaultPSWD).toString();/读取PSWD键的值,10.if(saved)11.ui-editUser-setText(m_user);12.13.ui-chkBoxSave-setChecked(saved);14.15.16.voidQDlgLogin:writeSettings()17.保存用户名,密码等设置18.QSettingssettings(WWB-Qt,samp6_5);/注册表键组19.settings.setValue(Usernam

12、e,m_user);用户名20.settings.setValue(PSWD,m_pswd);/密码,经过加密的21.settings.setValue(saved,ui-chkBoxSave-isChecked();22.应用程序的设置是指应用程序需要保存的一些信息,在Windows系统下,这些信息保存在注册表里.使用QSettings类可以实现设置信息的读取和写入.创立QSettings对象时,需要传递organization和appName例如:QSettingssettings(WWB-Qt,samp6_5);指向的注册表目录是HKEY_CURRENTJJ

13、SER/Software/WWB-Qt/samp6_5注册表里参数是以“键-键值对来保存的.writeSettings()函数里使用setValue()函数写入键值,readSettings()里使用value()函数读取键值.读取键值时可以指定缺省值,即如果键不存在,就用缺省值作为读取的值.在Windows的开始菜单的输入框里输入regedit,翻开注册表,查找到目录HKEYCURRENTUSER/Software/WWB-Qt/samp63盼看到注册表里参数存储情况.其存储的密码是加密后的字符串.字符串加密本实例中密码采用加密后的字符串保存,这样在实际应用中具有平安性.Qt提供

14、了用于加密的类QCryptographicHash,自定义函数encrypt()就利用这个类进行字符串加密,实现代码如下:1.QStringQDlgLogin:encrypt(constQString&str)2.字符串MD5算法加密3.QByteArraybtArray;4.btArray.append(str);/参加原始字符串5.QCryptographicHashhash(QCryptographicHash:Md5);/Md5加密算法6.hash.addData(btArray);添加数据到加密哈希值7.QByteArrayresultArr

15、ay=hash.result();/返回最终的哈希值8.QStringmd5=resultArray.toHex();/转换为16进制字符串9.returnmd5;10.QCryptographicHash创立时需要指定一种加密算法,加密算法变量是枚举类型QCryptographicHash:Algorithm,常用的常量值有QCryptographicHash:Md4、QCryptographicHash二Md5QCryptographicHash二Sha512等,完整的描述可参考Qt的帮助文档.QCryptographicHash只提供了加密功能,没有提供解密功

17、户名和密码正确9.10.writeSettings();/保存设置11.this-accept();/对话框accept.,关闭对话框12.13.else14.15.m_tryCount+;错误次数16.if(m_tryCount3)17.18.QMessageBox:critical(this,错误,输入错误次数太多,强行退出);19.this-reject();/退出20.21.else22.QMessageBox:warning(this,错误提示,用户名或密码错误);23.24.由于QCryptographicHash只提供了加密功能,

18、没有提供解密功能,所以,在读取应用程序设定后,无法将加密后的密码解密并显示在窗口上,程序只能回显用户名,而不能回显密码.这段程序会对输入的密码进行加密,由于从注册表读取的是加密后的密码,所以能够比照输入的用户名和密码与存储的用户名和密码是否匹配.如果输入正确,调用窗口的accept()槽函数关闭对话框,对话框返回值为QDialog:Accepted,否那么试错次数加一;如果试错次数大于3次,就调用窗口的reject()槽函数关闭对话框,对话框返回值为QDialog:Rejected.窗口拖动功能的实现由于Splash窗口没有边框,因此不能像普通的窗口那样通过拖动窗口的标题栏来拖动窗

19、口.为了实现窗口的拖动功能,对窗口的3个鼠标事件进行处理,实现的代码如下:1.voidQDlgLogin:mousePressEvent(QMouseEvent*event)2.鼠标按键被按下3.if(event-button()=Qt:LeftButton)4.(5.m_moving=true;6.记录下鼠标相对于窗口的位置7./event-globalPos()鼠标按下时,鼠标相对于整个屏幕位置8./pos()this-pos()鼠标按下时,窗口相对于整个屏幕位置9.m_lastPos=event-globalPos()-pos();10.11.

20、returnQDialog:mousePressEvent(event);/12.13.14.voidQDlgLogin二mouseMoveEvent(QMouseEvent*event)15./鼠标按下左键移动16./(event-buttons()&Qt:LeftButton)按下是左键17.鼠标移动事件需要移动窗口,窗口移动到哪里呢就是要获取鼠标移动中,窗口在整个屏幕的坐标,然后move到这个坐标,怎么获取坐标18.通过事件event-globalPos()知道鼠标坐标,鼠标坐标减去鼠标相对于窗口位置,就是窗口在整个屏幕的坐标19.if(m_movin

21、g&(event-buttons()&Qt:LeftButton)20.&(event-globalPos()-m_lastPos).manhattanLength()QApplication二startDragDistance()21.22.move(event-globalPos()-m_lastPos);23.m_lastPos=event-globalPos()-pos();24.25.returnQDialog:mouseMoveEvent(event);26.27.28.voidQDlgLogin二mouseReleaseEvent(QMouseEvent*event)29.鼠标按键释放30.m_moving=false;/停止移动31.mousePressEvent(QMouseEvent*event)事件在鼠标按键按下时发生,传递的参数event有鼠标按键和坐标信息,判断如果是鼠标左键按下,就设置变量m_moving值为true,表示开始移动,并记录下鼠标坐标.event-globalPos()与对话框的pos()是不同坐标系下的坐标,在绘图这一章再详细介绍.mouseMoveEvent(QMouseEvent*event)事件在鼠

THE END
1.Qt5.9UI设计(四)——布局设计及自定义界面liwen01Qt5.9 UI设计(四)——布局设计及自定义界面 回到顶部 前言 前面我们已经创建了mainwindowControlTabWidgetControlTreeWidgetmaintitlebar4个UI几面,我们需要将其他三个UI放置到mainwindow显示,同时需要它们可以自适应的界面的大小缩放。这里会使用到水平布局和垂直布局方法。https://www.cnblogs.com/liwen01/p/17323335.html
2.个ui界面的练习(一):界面的基本布局qtui设计界面布局至此,完成了布局的基本框架设计,软件的显示主界面(appFrame)已经自动布满了QMainWindow,而且,当拖动改变QMainWindow的尺寸时,appFrame,也就是软件的显示主界面也随之改变。这就是使用布局的好处,它会自动调整相对的尺寸,使软件界面能够适应不同的屏幕分辨率。https://blog.csdn.net/xulibo5828/article/details/140756379
3.Qt教程:快速上手的图形用户界面开发指南Qt教程引领您快速入门图形用户界面开发,覆盖跨平台应用构建、环境搭建、C++基础、UI设计与信号槽机制,通过实践案例深入理解Qt功能,实现从零到掌握Qt开发全流程。 Qt简介 历史与特点 Qt框架由 Trolltech 公司开发,自1991年发布以来,随着Qt/Embedded、Qt for Windows、Qt/OSX等版本的推出,逐渐成为众多开发者的首选工具https://www.imooc.com/article/349110
4.树莓派Qt系列教程4:Qt基础知识理解布局和设计工具栏:主要实现布局和界面设计 信号和槽编辑器:可视化的进行信号和槽的关联 对象浏览器:用树状图的形式显示各个组件之间的布局包含关系 属性编辑器:显示某个选中的组件或者窗口的属性以及取值 总结 本节课我们学习了一个简单的Qt程序包含的各个部分。虽然我们的教程会采用Qt Quick方式进行开发,但了解一下此https://www.waveshare.net/study/article-1004-1.html
5.Qt可视化跨平台软件开发工具软件界面开发软件界面设计UIQt-UI Qt界面开发 软件界面开发 UI开发 软件UI开发 可视化跨平台软件开发工具 开源软件项目 开发工具 提供多种工具组件,提升10倍应用程序开发效率,带你轻松完成各种应用程序的开发。Qt-UI为您提供高效开发工具与技术产品相关服务http://www.qt-ui.com/qttutorial/player.php?id=5
6.从零开始:Qt可视化程序设计基础教程Qt编程目前已被广泛应用于嵌入式系统、电力系统和军工系统等与硬件交互的界面系统中,是可视化程序设计(又称可视化编程)的主要选择。目前,能做到简明扼要、通俗易懂地介绍C++语言基础,并与可视化程序设计工具Qt结合,让读者高效、快速掌握人工智能编程的图书和资料甚少。https://www.epubit.com/bookDetails?id=UB7812dad9e158a
7.Qt6.2C++入门自学零基础教程GUI数据可视化界面可视化图像处理串口> 编程语言与程序设计 > 2023新 Qt 6 C++开发指南 Qt6.2 C++入门自学零基础教程GUI数据可视化界面可视化图像处理串口通信编程CMake 教材书籍GUI程序设计 湖南弘道图书专营店 2023新 Qt 6 C++开发指南 Qt6.2 C++入门 京东价 ¥ 促销 展开促销 配送至 https://item.jd.com/10068987110921.html
8.QT教程—1.1Qt入门51CTO博客Unicode 也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案 utf8 utf16 vs写Qt程序默认使用的本地编码 -> gbk 修改QtCreator的编码 QtCreator主界面介绍 默认的编译套件 MinGW->Minimalist GNU for Windows MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集https://blog.51cto.com/u_14114084/3652813
9.Qt入门教程详细讲解版.pdfQt入门教程-详细讲解版 如何学习Qt 我们假设你已经熟悉C++ 了! 请先阅读一下Qt 白皮书。它包含一个关于Qt 软件的概述,并且提供了一些用来 示范使用Qt 进行编程的代码的片断。它会给你一个“大的图画”。 如果你想要完全的在C++ 中进行编程,不使用任何设计工具的帮助下在代码中设 计你的界面,请阅读教程。教程1https://max.book118.com/html/2018/1026/7003062065001154.shtm
10.界面开发框架Qt新手入门教程:模型/视图的创建指南(一)本教程包括示例代码,供您编辑和集成到项目中,教程的源代码位于Qt的examples/widgets/tutorials/modelview目录下。 点击获取Qt Widget组件下载 1. 介绍 Model/View(模型/视图)是一种用于在处理数据集的小部件中将数据与视图分离的技术,标准的小部件不是为将数据与视图分离而设计的,这就是Qt有两种不同类型的小部https://www.evget.com/article/2023/1/29/46591.html
11.PyQT5速成教程2QtDesigner介绍与入门PyQT5速成教程- 本文由 沈庆阳 所有,转载请与作者取得联系! Qt Designer的介绍 在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,从而实现了开发的便捷。Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果https://www.jianshu.com/p/5b063c5745d0
12.PyQt十讲QtDesigner工具的使用方法腾讯云开发者社区Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供Python程序调用 这篇文章主要介绍了PyQt中Qt Designer工具的使用方法,文章进行了非常详细的示例介绍。 这篇文章对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以阅读https://cloud.tencent.com/developer/article/1518078
13.Qt教程(从最全面认识Qt)完整版PDF电子书下载Qt 是一个跨平台的 C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。 《Qt教程》从界面认识,控件,安装及环境搭建,资源下载等,详细分析,各种实例轻松入门,实战应用。 https://www.jb51.net/books/791062.html