qt学习笔记(三)之对话框-QDialog

转载 2015年07月09日 15:03:14

对话框一般用来提供反馈信息或从用户处获取输入,Qt 实现了很丰富的对话框类。

1、首先我们来看看QDialog的类关系


2、模态对话框和非模态对话框

所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。

在Qt中,Qt的模态与非模态对话框是通过其属性modal来确定的。我们来看看modal属性,其定义:

  1. modal:bool  
默认情况下,对话框的该属性是false,这时候通过show()方法显示的对话框就是非模态对话框。

而使用exec()方法显示对话框的话,将忽略modal属性值的设置并把对话框设置为模态对话框,

一般使用setmodal()方法来设置对话框的modal属性。

非模态对话框如果是栈对象,当代码退出对话框对象的作用域后,该对话框就会自动销毁了,这就造成用户来不及和对话框进行交互,对话框就消失了。因此,必须通过new操作在堆中创建非模态对话框。

3、代码解析

loginDlg.h

  1. #ifndef LOGINDLG_H  
  2. #define LOGINDLG_H  
  3.   
  4. #include <QDialog>  
  5.   
  6. class QLineEdit;  
  7. namespace Ui {  
  8.     class CloginDlg;  
  9. }  
  10.   
  11. class CloginDlg : public QDialog  
  12. {  
  13.     Q_OBJECT  
  14.   
  15. public:  
  16.     explicit CloginDlg(QWidget *parent = 0);  
  17.     ~CloginDlg();  
  18. public slots:  
  19.     virtual void accept();  
  20. private:  
  21.     Ui::CloginDlg *ui;  
  22.     QLineEdit *nameEdit;  
  23.     QLineEdit *pwdEdit;  
  24. };  
  25.   
  26. #endif // LOGINDLG_H  

第六行 我们声明了QLineEdit,因为在该头文件,我们仅仅使用了指向QLineEdit类的指针。

查阅了部分书籍,原段

/*

首先,它减小了头文件的大小,增加了编译速度(特别是当头文件被其他文件多次包含引用时);

其实,这样做可以避免因为头文件的顺序不当而造成连接错误,特别是在大的工程当中更应该避免随意地在一个头文件包含另一个头文件。

*/

代码中出现的Ui是因为我们添加了Qt Designer文件

  1. Q_OBJECT  
宏的作用是启动Qt元对象的一些特性(比如支持信号与槽等),它必须放置到类定义的私有区。///????私有区

  1. virtual void accept();  
重新声明了QDialog类的虚函数accept()。因为我们的功能要求点击ok后还必须验证账号与密码的正确性。

在我学习Qt短短几个星期的体验中,我们在”画“界面的时候通常有几个步骤

1、定义类对象,指明父对象

2、设置对象属性

3、信号与槽

4、布局

5、”show“出来

所以在这里我不详细介绍构造函数的实现代码了,我们来分析下我们重新声明的accept()

  1. void CloginDlg::accept()  
  2. {  
  3.     if(nameEdit->text().trimmed() == tr("qt") && pwdEdit->text() == tr("1234"))  
  4.     {  
  5.         QDialog::accept();  
  6.     }  
  7.     else  
  8.     {  
  9.         QMessageBox::warning(this, tr("waring"), "user name or password is wrong", QMessageBox::Yes);  
  10.         nameEdit->setFocus();  
  11.     }  
  12. }  
QLineEdit::text()返回的类型是一个QString字符串。

Qstring::trimmed() const 我们看看Qt的帮助文档

Returns a string that has whitespace removed from the start and the end.

Whitespace means any character for which QChar::isSpace() returns true. This includes the ASCII characters '\t', '\n', '\v', '\f', '\r', and ' '.

它主要是用来移除字符串开头和结尾的”空白字符“的。

如果用户名和密码全部正确,调用父类的QDialog::accept()槽函数,该函数关闭对话框,设置对话框的运行结果为QDialog::Accepted,并发送QDialog::finished(int result)信号。如果错误的话,将会显示出一个模态的警告提示框。

相关文章推荐

QT 登录界面制作

shanping.pro #------------------------------------------------- # # Project created by QtCreator ...

3.2 对话框QDialog(1)-->Qt Creater 快速入门(笔记)

得到发放

学习笔记之Qt4内建对话框

为了方便程序员进行某些特定功能对话框的编程,Qt提供了一套标准的通用对话框。这些内建的对话框都提供了一些便于使用的静态函数。在windows系统上,这些静态函数将会调用本地的windows对话框;而在...

QT学习笔记之对话框

QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入。在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。 1)       模式对话框:用户只...

C++ GUI Qt4学习笔记(二) 创建对话框

一.finddialog.h文件  /*  *首先,声明四个用到的类。这里所做的是前向声明,否则就会编译出错,因为编译器不知道这些类是否存在  *为了slots的定义,需要访问Dialog的组件,因此...

Qt学习笔记01_标准对话框

Dialog:对话框: 按照运行时该对话框是不是还可一与其他的窗口进行交互,把dialog分为模态和非模态的 模态对话框: 在没有关闭它之前不能与同意应用程序中的其他窗口进行交互。 方法1: ...

Qt之GUI学习笔记(四)——创建对话框

文章原文来自http://devbean.blog.51cto.com/448512/198971,自己只是写出自己的学习体会。 创建一个对话框,最终结果如图所示1.工程建立步骤 (1)选择Qt ...

《Qt5学习笔记5》创建对话框

可以任意分发转载,但请注明出处。 如有纰漏,请发送E-mail到artprog@163.com联系我,谢谢 对话框是GUI程序中很重要的一个部分,它能够使用户和软件进行交互以完成许多事物。在...

QT学习笔记----登录对话框

转载请注明出处:http://blog.csdn.net/yf210yf  效果图:   用户名或密码输入错误出现 密码和用户名正确进入主界面 1.新建工程,主窗口 2.新...

Qt学习笔记--对话框

Dialog#include "mywidget.h" #include "ui_mywidget.h" #include #include #include #include #include #i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)