Qt学习之路(7): 创建一个对话框(上)

简介:
首先说明一点,在C++ GUI Programming with Qt4, 2nd中,这一章连同以后的若干章一起,完成了一个比较完整的程序——一个模仿Excel的电子表格。不过这个程序挺大的,而且书中也没有给出完整的源代码,只是分段分段的——我不喜欢这个样子,我想要看到我写出来的是什么东西,这是最主要的,而不是慢慢的过上几章的内容才能看到自己的作品。所以,我打算换一种方式,每章只给出简单的知识,但是每章都能够运行出东西来。好了,扯完了,下面开始!
 
以前说的主要是一些基础知识,现在我们来真正做一个东西——一个查找对话框。什么?什么叫查找对话框?唉唉,先看看我们的最终作品吧!
 
 
好了,首先新建一个工程,就叫FindDialog吧!嗯,当然还是Qt Gui Application,然后最后一步注意,Base Dialog选择QDialog,而不是默认的QMainWindow,因为我们要学习建立对话框嘛!名字随便起,不过我就叫finddialog啦!Ganarate form还是不要的。然后Finish就好了。
 
打开finddialog.h,开始编写头文件。
 
InBlock.gif#ifndef FINDDIALOG_H 
InBlock.gif#define FINDDIALOG_H 
InBlock.gif 
InBlock.gif#include <QtGui/QDialog> 
InBlock.gif 
InBlock.gif class QCheckBox; 
InBlock.gif class QLabel; 
InBlock.gif class QLineEdit; 
InBlock.gif class QPushButton; 
InBlock.gif 
InBlock.gif class FindDialog :  public QDialog 
InBlock.gif
InBlock.gif        Q_OBJECT 
InBlock.gif 
InBlock.gif public
InBlock.gif        FindDialog(QWidget *parent = 0); 
InBlock.gif        ~FindDialog(); 
InBlock.gifsignals: 
InBlock.gif         void findNext( const QString &str, Qt::CaseSensitivity cs); 
InBlock.gif         void findPrevious( const QString &str, Qt::CaseSensitivity cs); 
InBlock.gif private slots: 
InBlock.gif         void findClicked(); 
InBlock.gif         void enableFindButton( const QString &text); 
InBlock.gif private
InBlock.gif        QLabel *label; 
InBlock.gif        QLineEdit *lineEdit; 
InBlock.gif        QCheckBox *caseCheckBox; 
InBlock.gif        QCheckBox *backwardCheckBox; 
InBlock.gif        QPushButton *findButton; 
InBlock.gif        QPushButton *closeButton; 
InBlock.gif}; 
InBlock.gif 
InBlock.gif#endif  // FINDDIALOG_H
 
大家都是懂得C++的啊,所以什么#ifndef,#define和#endif的含义和用途就不再赘述了。
 
首先,声明四个用到的类。这里做的是前向声明,否则的话是编译不过的,因为编译器不知道这些类是否存在。简单来说,所谓前向声明就是告诉编译器,我要用这几个类,而且这几个类存在,你就不要担心它们存不存在的问题啦!
 
然后是我们的FindDialog,继承自QDialog。
 
下面是一个重要的东西:Q_OBJECT。这是一个宏。凡是定义信号槽的类都必须声明这个宏。至于为什么,我们以后再说。
 
然后是public的构造函数和析构函数声明。
 
然后是一个signal:,这是Qt的关键字——还记得前面说过的嘛?Qt扩展了C++语言,因此它有自己的关键字——这是对信号的定义,也就是说,FindDialog有两个public的信号,它可以在特定的时刻发出这两个信号,就这里来说,如果用户点击了Find按钮,并且选中了 Search backward,就会发出findPrevious(),否则发出findNext()
 
紧接着是private slots:的定义,和前面的signal一样,这是私有的槽的定义。也就是说,FindDialog具有两个槽,可以接收某些信号,不过这两个槽都是私有的。
 
为了slots的定义,我们需要访问FindDialog的组件,因此,我们把其中的组件定义为成员变量以便访问。正是因为需要定义这些组件,才需要对它们的类型进行前向声明。因为我们仅仅使用的是指针,并不涉及到这些类的函数,因此并不需要include它们的头文件——当然,你想直接引入头文件也可以,不过那样的话编译速度就会慢一些。
 
好了,头文件先说这些,下一篇再说源代码啦!休息,休息一下!

本文转自 FinderCheng 51CTO博客,原文链接:
http://blog.51cto.com/devbean/198971
相关文章
|
5月前
|
Linux iOS开发 MacOS
19 QT - 标准文件对话框
19 QT - 标准文件对话框
30 0
|
3月前
Qt6学习笔记五(自定义对话框、QMessageBox、QColorDialog、QFileDialog、QFontDialog)
Qt6学习笔记五(自定义对话框、QMessageBox、QColorDialog、QFileDialog、QFontDialog)
40 0
|
5月前
15 QT - 对话框QDialog概述
15 QT - 对话框QDialog概述
20 0
|
2月前
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
52 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
4月前
|
数据安全/隐私保护
QT基础教程(对话框2)
QT基础教程(对话框2)
32 0
|
4月前
QT基础教程(对话框1)
QT基础教程(对话框1)
33 0
|
4月前
|
C++
C++ Qt开发:自定义Dialog对话框组件
在之前的文章中笔者已经为大家展示了默认`Dialog`组件的使用方法,虽然内置组件支持对数据的输入,但有时候我们需要一次性输入多个数据,此时如果之使用默认模态对话框似乎不太够用,此时我们需要自己创建一个自定义对话框,需要说明的是此类对话框也是一种窗体,所以可以在其上面放置任何通用组件,以实现更多复杂的开发需求。自定义对话框需要解决的问题是,如何让父窗体与子窗体进行数据交换,要实现数据的交换有两种方式,第一种方式是通过动态加载模态对话框,当用户点击确定后通过`GetValue()`来拿到数据,而第二种方式则是通过发送信号的方式将数据投递给父窗体,这两种方式都可以,读者可根据自身需求来选择不同的通
38 1
C++ Qt开发:自定义Dialog对话框组件
|
4月前
|
数据安全/隐私保护 C++ 开发者
C++ Qt开发:标准Dialog对话框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框`QInputDialog`、`QFileDialog `这两种对话框组件的常用方法及灵活运用。在 Qt 中,标准对话框提供了一些常见的用户交互界面,用于执行特定任务,例如获取用户输入、选择文件路径、显示消息等。这些对话框通常具有标准化的外观和行为,使得在不同的平台上能够保持一致性。在一般的开发过程中,标准对话框是开发者常用的工具之一。
50 1
C++ Qt开发:标准Dialog对话框组件
|
5月前
|
API
18 QT - 消息对话框
18 QT - 消息对话框
24 0
|
5月前
16 QT - 标准对话框
16 QT - 标准对话框
19 0

推荐镜像

更多