一、使用设计模式创建界面

1.新建Qt Widgets Application,项目名称为login,类名和基类保持MainWindow和QMainWindow不变。

2.完成项目创建后,向项目中添加新的Qt设计师界面类,模板选择Dialogwithout Buttons,类名更改为LoginDialog。完成后向界面上添加两个标签Label、两个行编辑器Line
Edit和两个按钮Push Button,设计界面如下图所示。

3.先选中用户名后面的行编辑器部件,然后在属性编辑器中将其objectName属性更改为usrLineEdit,如下图所示。下面依次更改其他部件的objectName属性,密码后面的行编辑器为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。

4.下面使用另外一种信号和槽的关联方法来设置退出按钮。在设计模式下方的信号和槽编辑器(Signals
& Slots Editor)中,先点击左上角的绿色加号添加关联,然后选择发送者为exitBtn,信号为clicked(),接收者为LoginDialog,槽为close()。如下图所示。这样,当单击退出按钮时,就会关闭登录对话框。

5.右击登录按钮,在弹出的菜单中选择“转到槽…”,然后选择clicked()信号并确定。转到相应的槽以后,添加函数调用:

  1. void LoginDialog::on_loginBtn_clicked()
  2. {
  3. accept();
  4. }

6.下面到main.cpp文件,更改内容如下:

  1. #include
  2. #include "mainwindow.h"
  3. #include "logindialog.h"
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. MainWindow w;
  8. LoginDialog dlg;
  9. if (dlg.exec() == QDialog::Accepted)
  10. {
  11. w.show();
  12. return a.exec();
  13. }
  14. else return 0;
  15. }

7.这时运行程序,按下退出按钮会退出程序,按下登录按钮会关闭登录对话框,并显示主窗口。

二、登录设置

1.下面添加代码来实现使用用户名和密码登录,这里只是简单将用户名和密码设置为了固定的字符串,如果以后学习了数据库,还可以通过读取数据库来获取用户名和密码。到logindialog.cpp文件中将登录按钮的单击信号对应的槽的代码更改为:

  1. void LoginDialog::on_loginBtn_clicked()
  2. {
  3. // 判断用户名和密码是否正确,
  4. // 如果错误则弹出警告对话框
  5. if(ui->usrLineEdit->text() == tr("yafeilinux") &&
  6. ui->pwdLineEdit->text() == tr("123456"))
  7. {
  8. accept();
  9. } else {
  10. QMessageBox::warning(this, tr("警告!"),
  11. tr("用户名或密码错误!"),
  12. QMessageBox::Yes);
  13. }
  14. }

Qt中的QMessageBox类提供了多种常用的对话框类型,比如这里的警告对话框,还有提示对话框、问题对话框等。这里使用了静态函数来设置了一个警告对话框,这种方式很便捷,其中的参数依次是:this表明父窗口是登录对话框、窗口标题、界面显示的内容和最后要显示的按钮,这里使用了一个Yes按钮。注意还要添加该类的头文件包含,即:#include "QMessageBox"。

3.对于输入的密码,我们常见的是显示成小黑点的样式。下面点击logindialog.ui文件进入设计模式,然后选中界面上的密码行编辑器,在属性编辑器中将echoMode属性选择为Password。这时再次运行程序,可以看到密码显示已经改变了。如下图所示。

当然,除了在属性编辑器中进行更改,也可以在loginDialog类的构造函数中使用setEchoMode(QLineEdit::Password)函数来设置。

4.在行编辑器的属性栏中还可以设置占位符,就是没有输入信息前的一些提示语句。例如将密码行编辑器的placeholderText属性更改为“请输入密码”,将用户名行编辑器的更改为“请输入用户名”,运行效果如下图所示。

5.对于行编辑器,还有一个问题就是,比如我们输入用户名,在前面添加了一个空格,这样也可以保证输入是正确的,这个可以使用QString类的trimmed()函数来实现,它可以去除字符串前后的空白字符。下面将logindialog.cpp文件中登录按钮单击信号槽函数中的判断代码更改为:

  1. if(ui->usrLineEdit->text().trimmed() == tr("yafeilinux")
  2. && ui->pwdLineEdit->text() == tr("123456"))

6.最后,当登录失败后,我们希望可以清空用户名和密码信息,并将光标定位到用户名输入框中。这个可以通过在判断用户名和密码错误后添加相应的代码来实现

  1. else {
  2. QMessageBox::warning(this, tr("警告!"),
  3. tr("用户名或密码错误!"),
  4. QMessageBox::Yes);
  5. // 清空内容并定位光标
  6. ui->usrLineEdit->clear();
  7. ui->pwdLineEdit->clear();
  8. ui->usrLineEdit->setFocus();
  9. }

QT5每日一学(三) QT登陆对话框的更多相关文章

  1. QT5每日一学(二)编写QT多窗口程序

    一.添加主窗口 1.首先打开Qt Creator,新建Qt Widgets Application,项目名称设置为windows,在类信息界面保持基类为QMainWindow.类名为MainWindo ...

  2. QT5每日一学(五)QT布局管理器

    Qt中的布局管理器主要包括 QBoxLayout基本布局管理器 QGridLayout栅格布局管理器 QFormLayout窗体布局管理器 而基本布局管理器又分为QHBoxLayout水平布局管理器和 ...

  3. QT 登陆对话框

    该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 正文 一.创建项目 1.新建Qt Gui应用,项目名称为“login”,类名和基类保持MainWi ...

  4. QT5每日一学(一)下载与安装

    一.Qt SDK的下载和安装 1.下载        Qt官网主页提供了最新版Qt的下载,不过我们更倾向于去资源下载页面(https://download.qt.io/official_release ...

  5. 使用QT实现一个简单的登陆对话框(纯代码实现C++)

    使用QT实现一个简单的登陆对话框(纯代码实现C++) 效果展示 使用的QT控件 控件 描述 QLable 标签 QLineEdit 行文本框 QPushButton 按扭 QHBoxLayout 水平 ...

  6. 12个QT基本对话框,以及淡入原理(用定时器把窗口逐渐变成透明)

    一.基本对话框 1,核心库: 界面程序 QApplication 非程序界面QCoreAppliction 2,消息循环必须执行QApplication.exec(); 3,消息绑定机制: 信号-槽  ...

  7. Qt5官方demo分析集11——Qt Quick Particles Examples - Affectors

    在这个系列中的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集10--Qt ...

  8. Qt之对话框QDialog

    这一节主要讲述对话框类,先讲述两种不同类型的对话框,再介绍Qt提供的几个标准对话框.对应本节的内容,可以在帮助索引中查看 QDialog 和 Dialog Windows 关键字. 一.模态和非模态对 ...

  9. Qt5官方demo分析集10——Qt Quick Particles Examples - Emitters

    此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 前段时间去听了Qt在北京的开发人员大会,感觉QML ...

随机推荐

  1. How to Uninstall Internet Explorer 11 for Windows 7

    Internet Explorer 11 is the newest version of Microsoft's web browser, but not everyone is a fan. If ...

  2. C++MFC编程笔记day06 MFC向导、MFC画图类使用

    MFC画图    MFC画图类包含画图设备类和画图对象类    1 画图设备类      CDC类-父类是CObject,封装的是一般的画图设备,比如:显示器,            打印机等.    ...

  3. mysql查看所有存储过程,函数,视图,触发器,表,分页

    查询数据库中的存储过程和函数 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' ...

  4. 使用Base64进行string的加密和解密 公钥加密—私钥签名

    使用Base64进行string的加密和解密   //字符串转bytesvar ebytes = System.Text.Encoding.Default.GetBytes(keyWord);//by ...

  5. Redis管理各类型存储数据命令

    >>>字符串 1 SET key value 设置指定 key 的值 2 GET key 获取指定 key 的值. 3 GETRANGE key start end 返回 key 中 ...

  6. 3 微信开发本地代理环境的搭建--实现将内网ip映射到外网

    微信公众号的开发,要搭建网站,并且随时都有可能修改网站内容进行调试,这就需要临时外网能返回本地开发环境搭建的项目进行测试,即内网映射到公网,但是好多开发者没有自己的域名和服务器,这里我们先来搭建一个本 ...

  7. onDestroy强制退出后,process crash的处理

    from http://bbs.9ria.com/thread-248722-1-1.html     一般情况,我们在执行测试的过程中都会调用tearDwon方法,以Robotium为例,我们在te ...

  8. win10访问共享文件夹提示:引用的账户当前已锁定,且当前可能无法登陆

    最近一台电脑访问windows 2008 R2 server的共享文件夹.没有使用域环境. win10界面提示:引用的账户当前已锁定,且当前可能无法登陆. 登陆2008发现,该账户的确锁定.猜测可能该 ...

  9. 相关性系数缺点与证明 k阶矩

    相关性系数 https://baike.baidu.com/item/相关系数/3109424?fr=aladdin 缺点 需要指出的是,相关系数有一个明显的缺点,即它接近于1的程度与数据组数n相关, ...

  10. Spring Boot Spring 自动配置

    Spring Boot 不是应用服务器: Spring Boot没有实现诸如JPA.JMS(Java Message Service)之类的Java企业级规范: Spring Boot没有引入任何形式 ...