本文概要:简要讲述对话框的概念已经分类以及如何通过Qt编写一个简单的对话框程序

// finddialog.h 头文件
#ifndef FINDDIALOG_H
#define FINDDIALOG_H#include <QDialog>class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;class FindDialog : public QDialog
{Q_OBJECT  // Q_OBJECT为Qt的宏,定义了信号与槽的类必须含有该宏public: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();void enableFindButton(const QString &text);private:QLabel *label;QLineEdit *lineEdit;QCheckBox *caseCheckBox;QCheckBox *backwardCheckBox;QPushButton *findButton;QPushButton *closeButton;
};
#endif

// finddialog.cpp
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "finddialog.h"FindDialog::FindDialog(QWidget *parent)
: QDialog(parent)
{label = new QLabel(tr("Find &what:")); // 设置快捷键 Alt+WlineEdit = new QLineEdit;// 设置lineEdit为label的伙伴,当按下快捷时,程序的焦点会转移到lineEdit上label->setBuddy(lineEdit);caseCheckBox = new QCheckBox(tr("Match &case"));  // 设置快捷键 Alt+CbackwardCheckBox = new QCheckBox(tr("Search &backward")); // 设置快捷键 Alt+B
findButton = new QPushButton(tr("&Find"));// 设置findButton为整个对话框(只有在对话框中才有默认按钮)的默认按钮// (那么如果用户在对话框中敲击回车键,这个推动按钮将被按下)findButton->setDefault(true);  // 禁用按钮,当禁用时不会与用户发生交换,显示为灰色findButton->setEnabled(false); closeButton = new QPushButton(tr("Close"));/* 设置信号与槽的连接 */// 设置lineEdit与findButton之间的通信connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SLOT(enableFindButton(const QString &)));// 当findButton被点击时,调用findClicked()函数
    connect(findButton, SIGNAL(clicked()),this, SLOT(findClicked()));// 当点击closeButton按钮时调用close()函数,隐藏对话框
    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"));
    // 设置高度固定且高度为Qt建议的大小,在QtWidget类中含有建议大小属性 setFixedHeight(sizeHint().height()); 
}void FindDialog::findClicked()
{// 该函数获取lineEdit的text与caseCheckBox的选项设置,// 再根据backwardCheckBox的选项来选择发送向前查找或者// 向后查找信号QString text = lineEdit->text();Qt::CaseSensitivity cs =caseCheckBox->isChecked() ? Qt::CaseSensitive: Qt::CaseInsensitive;// emit为Qt的关键字,为Qt的扩展语法,表示发送信号的含义// 在这里可能会发送findPrevious或者findNext信号,但是// 由于没有设置相应的槽接受,所以不会调用其他函数if (backwardCheckBox->isChecked())emit findPrevious(text, cs);elseemit findNext(text, cs);
}void FindDialog::enableFindButton(const QString &text)
{findButton->setEnabled(!text.isEmpty());
}

// main.cpp
#include <QApplication>
#include "finddialog.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);FindDialog *dialog = new FindDialog;dialog->show();return app.exec();
}


程序运行效果图:


对话框:

  • 概念:在图形用户界面中,对话框是一种特殊的视窗, 用来在用户界面中向用户显示信息,或者在需要的时候获得用户的响应。之所以称之为“对话框”是因为它们使计算机和用户之间构成了一个对话——或者是通知用户一些信息,或者是请求用户的输入,或者两者皆有。
  • 分类
    • 无模式对话框:非强制性回应对话框(如notepad++的查找对话框),用于向用户请求非必须资料。即可以不理会这种对话框或不向其提供任何信息而继续进行当前工作,所以窗口均可打开并处于活动状态或是获得焦点(人机交互热点)。一类无模式对话框表现为工具栏,比如设置用于文字颜色的设置。查找/替换对话框可算是无模式对话框,也可以设计为工具栏。
    • 有模式对话框
      特点:这种对话框强制要求用户回应,否则用户不能再继续进行操作,直到与该对话框完成交互。这种对话框设计用于需要一些额外的信息,然后才可以继续进行的操作,或可能只想确认使用者想要进行一项具有潜在危险性的操作。有模式对话框一般被视为坏的设计方案,因为以一种用户不喜欢看到方式出现,或是被习惯不去注意对话框提示的用户忽略,导致无法避免危险操作。
    • 有模式对话框分类:有模式对话框一般分为系统级和应用程序级。

系统级有模式对话框出现时,用户在完成与这个对话框交互之前不能进行其它操作,比如关机对话框、Windows Vista 中的 UAC。

应用程序级有模式对话框则只对它的母程序有所限制,但可能在允许运行多个实际的不同软件中有不同的表现:只限定其中的一个

程序窗口使之无法操作或全部限定。

Qt中对象的new与delete:

在Qt中,当删除一个父对象时,会自动删除其子对象,不需要在父对象的析构函数中显式的删除其子对象。在该例程中,QPushButton类,QCheckBox类的子窗口部件与QHBoxLayout,QVBoxLayout的布局管理器子对象被new创建,但是没有在析构函数中显式delete,Qt会在删除finddialog对象时自动删除作为其子孙的窗口部件与子布局管理器。

Tab键的顺序:

在Qt中,Tab键的顺序为创建窗口部件的顺序,并且可以通过显式的调用QWidget::setTabOrder()来改变

转载于:https://www.cnblogs.com/tallisHe/p/4419055.html

第三讲 对话框的创建相关推荐

  1. 关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值

    当然网上关于这方面的技术博文非常多,此处我只是进行一下小记,再加一点自己的体会,方便以后查询. 一.模态对话框 1.创建及显示 模态对话框是一种阻塞式的对话框,即没有处理完该对话框,不能对其他地方进行 ...

  2. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

  3. 鸡啄米vc++2010系列11(非模态对话框的创建)

    上一节鸡啄米讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 鸡啄米已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将 ...

  4. 【MFC】对话框中创建工具栏

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 使用MFC向导可以创建 ...

  5. VS2010-MFC(对话框:一般属性页对话框的创建及显示)

    转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...

  6. MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

    属性页对话框包括向导对话框和一般属性页对话框两类,上一节讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.将上 ...

  7. MFC模态与非模态对话框的创建与销毁

    1.模态对话框的创建 (1)添加新的模块对话框资源,在ResourceView标签中右键项目选择"add resource...",添加一个对话框资源,并修改其ID(主要为了方便后 ...

  8. 对话框:创建对话框模板和修改对话框属性

    创建基于对话框 选择菜单项File->New->Project,弹出"New Project"对话框. 左侧面板中Installed Templated的Visual ...

  9. vc++开发学习二(模态对话框和非模态对话框的创建和销毁)

    ①.模态对话框与非模态对话框的区别: 模态对话框:一旦创建模态对话框,则无法操作父对话框,只能操作当前创建的模态对话框,关闭当前模态对话框后才可以操作父对话框非模态对话框:和模态对话框相反,创建该对话 ...

  10. 非模态对话框和模态对话框_创建

    一.非模态对话框:创建后,主程序还可以运行. 创建步骤如下: 1.1先建立一个基本对话框MFC工程,在资源列表添加一个对话框资源 1.2将创建的对话框修改名字和ID,比如将ID名为:IDD_TIP_D ...

最新文章

  1. java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
  2. Netty与Spring WebSocket
  3. 斐波那契数列快速算法详解
  4. Openssl verify命令
  5. python是什么 自学-怎么自学python,大概要多久?
  6. DataStream API及源算子
  7. Silverlight 操作Excel 中的进程资源释放问题(续)
  8. apache roller_Apache Roller RC支持Java EE 6服务器,Alex Ruiz离开了Oracle
  9. oracle性质是渐进正态性,基于惩罚函数的回归量变选择方法.doc
  10. oracle plm 文件系统,ORACLE-PlM管理方案(标准材料).ppt
  11. MiniUtilityFramework(九):CText和TEXT
  12. sam卡和sim卡区别_PSAM卡、SAM卡与SIM卡
  13. 通信室计算机室采购配置co2灭火器,2019一级消防案例分析考点:民用类建筑消防设施的配置...
  14. HibernateDaoSupport和nbsp;Hiber…
  15. 在STEAM上玩电路仿真
  16. Matlab 填补缺失数据
  17. 白帽子讲web安全读书笔记(Ⅰ)
  18. 期望DP——珂学送分
  19. 利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用)
  20. ICV报告:中国的数字经济与5G市场研究报告

热门文章

  1. 没有tools.jar包的解决办法
  2. python调整照片
  3. python客户端与服务器端通信数据库原理_python学习之网络部分
  4. jQuery(3)——如何绑定事件
  5. 树展示 移动端_企业快速搭建移动BI轻应用,怎么少得了这款BI工具
  6. webstorm运行的端口在哪看_webstorm(10.0.2)的端口号修改
  7. django 1366, “Incorrect string value: for column ‘‘ at row
  8. Kubernetes 小白学习笔记(2)--基本概念2
  9. thinkphp5 没有 $this->ajaxReturn
  10. html+css响应式布局