创建对话框

对话框是程序和用户交互的桥梁,提供了程序和用户之间对话的一种方式。很多程序都是由一个主窗口,在这个主窗口中包含一个菜单条,多个工具条,和足够多的对话框。也有些程序本身就是一个对话框,直接相应用户的输入请求。

finddialog.h

#ifndef FINDDIALOG_H
#define FINDDIALOG_H#include <QDialog>#include <QCheckBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>class FindDialog : public QDialog
{Q_OBJECTpublic:FindDialog(QWidget *parent = 0);signals:void findNext(const QString &str, Qt::CaseSensitivity cs); //向后查找void findPrevious(const QString &str, Qt::CaseSensitivity cs); //向前查找private slots:void findClicked(); //信号:find按钮void enableFindButton(const QString &text); //信号:lineEdit有文本private:QLabel *label;QLineEdit *lineEdit; //find whatQCheckBox *caseCheckBox; //match caseQCheckBox *backwardCheckBox; //search backwardQPushButton *findButton; //find按钮QPushButton *closeButton; //close按钮
};#endif

Q_OBJECT
一个宏定义,如果类里面用到了signal 或者slots,就要声明这个宏。

signals
声明了这个对话框发出的两个信号,如果选择向前查找,那么对话框就发出
findPrevious()信号,否则,发出findNext()信号。signal 也是一个宏,在编译之前,C++预处理把它变成标准的c++代码。Qt::CaseSensitivity 是一个枚举类型,有Qt::CaseSensitive和Qt::CaseInsensitive 两个值。

slot
在类的私有部分,声明有两个slot 函数。为了实现这两个函数,需要用到对话框的其他控件的信息,所以保存了一些控件的指针。slot 关键字和signal一样,也是一个宏。

finddialog.cpp

#include <QtGui>
#include "finddialog.h"
FindDialog::FindDialog(QWidget *parent): QDialog(parent)
{label = new QLabel(tr("Find &what:"));lineEdit = new QLineEdit;label->setBuddy(lineEdit);caseCheckBox = new QCheckBox(tr("Match &case"));backwardCheckBox = new QCheckBox(tr("Search &backward"));findButton = new QPushButton(tr("&Find"));findButton->setDefault(true);findButton->setEnabled(false);closeButton = new QPushButton(tr("Close"));connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableFindButton(const QString &)));connect(findButton, SIGNAL(clicked()), this, SLOT(findClicked()));connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));QHBoxLayout *topLeftLayout = new QHBoxLayout;topLeftLayout->addWidget(label);topLeftLayout->addWidget(lineEdit);QVBoxLayout *leftLayout = new QVBoxLayout;leftLayout->addLayout(topLeftLayout);leftLayout->addWidget(caseCheckBox);leftLayout->addWidget(backwardCheckBox);QVBoxLayout *rightLayout = new QVBoxLayout;rightLayout->addWidget(findButton);rightLayout->addWidget(closeButton);rightLayout->addStretch(); //使布局饱和QHBoxLayout *mainLayout = new QHBoxLayout;mainLayout->addLayout(leftLayout);mainLayout->addLayout(rightLayout);setLayout(mainLayout);setWindowTitle(tr("Find"));setFixedHeight(sizeHint().height()); //设定理想大小为固定大小
}void FindDialog::findClicked()
{QString text = lineEdit->text();Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;if (backwardCheckBox->isChecked()){emit findPrevious(text, cs); //触发信号}else{emit findNext(text, cs);}
}void FindDialog::enableFindButton(const QString &text)
{findButton->setEnabled(!text.isEmpty());
}

在传见控件和布局时我们使用了new,一般情况下,我们还需要写析构函数delete 这些控件。
但是在Qt 中这是不需要的,当父控件销毁时,Qt 自动删除它所有的子控件和布局。

当用户点击findButton 按钮,findClicked()就会调用,根据backwardCheckBox 状态,他发出findPrevious()或者findNext()信号。emit 也是一个Qt 的宏。
当用户改变lineEdit 中的文本,enableFindButton()slot 函数就会调用。如果输入了文本,那么让findButton 有效,否则就无效。

main.cpp

#include "finddialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);FindDialog w;w.show();return a.exec();
}

Qt4_派生对话框类相关推荐

  1. 【MFC】MFC对话框类

    00. 目录 文章目录 00. 目录 01. 概述 02. 通用对话框 03. OLE 通用对话框 04. 属性表类 05. 基于 HTML 的对话框类 06. 其它 07. 附录 01. 概述 类 ...

  2. 第七章:无模式对话框 和 Windows通用对话框类

    第七章:无模式对话框 和 Windows通用对话框类 1,[无模式对话框]在它处于激活状态下还允许用户在(同一个应用程序中)其它地方工作. [通用对话框]则是C++和一组Windows的实用对话框之间 ...

  3. 鸡啄米vc++2010系列7(对话框:创建对话框类和添加控件变量)

    前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下,生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 因为鸡啄米给大家的例程 ...

  4. MFC的Dlg和App什么区别?应用程序类与对话框类

    MFC里有个app类..他是一个项目工程类,有一个全局的实例化.theApp你可以理解为整个项目的实例,它重载了入口函数,所有的窗口神马的,都是在这个类里实例化的. dlg是对话框,是一个窗口.一个程 ...

  5. c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...

    我线程函数定义在对话框类的实现文件中 需要访问对话框类头文件中声明的变量 怎么才可以? i_noname(晚九朝五) 于 2005-9-15 16:14:25 DWORD WINAPI Proc(LP ...

  6. php对话框制作,织梦系统“提示窗口对话框类”详解,oxwindow.class.php、catalog_do.php...

    如果对织梦系统做过二次开发或学深入研究过的话,一定会知道在我们做织梦二次开发时,一般会把php文件以及对应的模板文件起的名字,除了扩展名外,其它都一样,这是织梦文件起名的一个特点.例如,index_b ...

  7. JavaScript模态对话框类(拖拽时动画)

    2010年写了一个模态对话框类,这次进行一些重构和扩充.拖拽时使其有动画效果.接口没变,如下 new ModelDialog({caption 标题 '对话框标题'(默认)template 主体内容 ...

  8. 【QT】QT从零入门教程(十四):标准颜色对话框类QColorDialog

      Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,本节要讲的是颜色对话框QColorDialog,它是在标准文件对话框的基础之上添加一些布局实现的. 测试程序: QColor color ...

  9. MFC 教程【12_对话框和对话框类CDialog 】

    对话框和对话框类CDialog 对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的. 模式和无模式对话框 对话框分两种类型,模式对话框和无模式对话框. 模式对 ...

最新文章

  1. JSP与mysql的连接
  2. oracle awr windows,windows下的oracle 如何生成awr报告
  3. LeetCode精讲 03无重复字符的最长子串(滑动窗口)
  4. 盘点这些年被黑的最惨的语言
  5. LeetCode 112. 路径总和 、113. 路径总和 II 思考分析
  6. Sublime Text 3 初试牛刀
  7. DUBBO 使用问题记录
  8. ArcGis dbf读写——挂接Excel到属性表 C#
  9. 三星显示、LG已开始为苹果iPhone 13生产OLED屏幕
  10. box-shadow用法;http://riny.net/lab/css3/box-shadow.html
  11. 遥感软件envi5.31
  12. 如何下载网页中加了限制的Flash、RM、WMV等视频文件
  13. ARINC 429 过滤介绍
  14. Android 中定义图片的资源文件
  15. 简单计算机java程序_JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单...
  16. int类型与char类型
  17. 【默默努力】ig-wxz-and-hotdog
  18. lvds 共模电感_一文了解共模电感/共模信号/差分信号
  19. Photoshop CS3专家讲堂视频教程(10月21日更新到106课)
  20. 换发型算法_AI拍照换发型软件下载-AI拍照换发型下载V999.999-西西软件下载

热门文章

  1. 计算机系统-理论-运行时堆栈/栈顶
  2. python3 django html 中文乱码_解决django后台管理界面添加中文内容乱码问题
  3. pitr 原理_pgsql的备份和恢复
  4. 自定义列_如何对Pandas DataFrame进行自定义排序
  5. 2018/12/06 eclipse 快速加载需要的包
  6. 如何用ModelsimSE仿真IP核-以PLL为例
  7. 可变cell,自适应cell,理解iOS 8中的Self Sizing Cells和Dynamic Type
  8. 后台传值给前台p标签
  9. [原创]group by和compute 的使用
  10. LeetCode(606)——根据二叉树创建字符串(JavaScript)