创建对话框

我们使用Qt Designer 创建Go-to-Cell 对话框,无论用编写代码的方式还是用Qt Designer,创建对话框都有如下基本的步骤:
1、创建和初始化子控件。
2、把子控件放到布局管理器中。
3、设置tab 顺序。
4、创建信号和槽。
5、实现对话框的自己的槽函数。

在windows 平台Qt 的安装目录的bin 目录下,点击desinger.exe,或者在unix 平台,在命令行上输入designer。当Qt Designer 启动后,它会列出一个控件模板的列表,选择一个模板,进入设计。

gotocelldialog.h

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H#include <QDialog>
#include "ui_gotocelldialog.h"class GoToCellDialog : public QDialog, public Ui::GoToCellDialog
{Q_OBJECTpublic:GoToCellDialog(QWidget *parent = 0);private slots:void on_lineEdit_textChanged();
};
#endif

gotocelldialog.cpp

#include <QtGui>
#include "gotocelldialog.h"GoToCellDialog::GoToCellDialog(QWidget *parent): QDialog(parent)
{setupUi(this);QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");lineEdit->setValidator(new QRegExpValidator(regExp, this));connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}void GoToCellDialog::on_lineEdit_textChanged()
{okButton->setEnabled(lineEdit->hasAcceptableInput());
}

setValidator
在构造函数中,我们还创建一个许可器(validator)限制编辑框输入的范围。Qt 提供了三个许可器类: QIntValidator , QDoubleValidator 和QRegExpValidator 。

这里我们使用了QRegExpValidator,使用的表达式为“[A-Za-z][1-9][0-9]{0,2}”这个表达式的意思是第一个字符输入为大写或者小写字母,第二个字符为一个数字范围是1 到9,第三个字符是一个数字范围为0 到9。

在QRegExpValidator 的构造函数中,第二个参数为this,把当前类作为它的父控件,这样就可以不用删除它,父控件析构时可以被自动删除。

on_lineEdit_textChanged()槽函数控制Ok 按钮的可用状态,通过编辑框中的输入字符,如果字符有效Ok 按钮则有效,否则为不可用状态。QLineEdit::hasAcceptableInput()根据我们在构造函数中设置的许可器返回bool 值。

在构造函数的最后两行,把QDialog 的accept()函数连接到OK 按钮的点击信号,把Cancel按钮的点击信号连接到reject()函数。这两个槽函数都关闭这个对话框,但是accept()返回QDialog::Accepted(值为1), reject()返回值为QDialog::Rejected(值为0)。不同的返回值可以判断用户点击了那个按钮。

main.cpp

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


使用qt Designer可以不改变源程序的情况下改变对话框的设计。如果对话框用C++代码编写,改变它将会很费力的。使用Qt Designer,uic 自动重新生成源文件。不会浪费任何时间。

Qt 的父子机制

Qt 的父子机制在QObject 中实现的。当我们创建一个带有父的对象(如一个子控件,一个许可器,布局管理器等)时,父对象把子对象放到自己的子对象列表中。父对象被删除时,它查找自己的子对象并把每一个删除掉。这些子对象再把自己的子对象删除掉,如此递归,知道删除所有对象。

这种父子对象的机制简化了内存管理,减少了内存泄漏的危险。需要程序员删除的对象就是我们使用new 创建的没有父对象的对象。如果我们在父对象存在时删除了它的一个子对象,Qt 将会在父列表中自动删除。(需要记住的是Qt 只是删除有父的对象,父对象还是需要手动删除的,还有就是那些用new 申请的没有指定父的内存,一般情况下,在对话框里的子控件,许可器和布局管理器由Qt 自己管理,其他还要程序员小心删除)

对于控件来讲,父对象还有一个意义:子控件在父对象的显示区域内显示。当父控件删除后,子控件不但在内存中被删除,它也同时在屏幕上消失。

Qt4_快速设计对话框相关推荐

  1. Qt 第二章 创建对话框--快速设计对话框(2)

    gotocelldialog.h头文件 #ifndef GOTOCELLDIALOG_H #define GOTOCELLDIALOG_H #include <QDialog> class ...

  2. 如何快速设计元器件原理图库和PCB封装库?

    目录 1.立创商城EDA免费库 2.Altium Library Loader 3.贸泽电子ECAD模型 在设计电路的过程中经常会遇到这样的问题:无法快速找到合适的元器件原理图封装和PCB封装(Foo ...

  3. butter滤波器是iir吗_如何快速设计一个IIR滤波器

    在文章如何快速设计一个FIR滤波器(一)以及如何快速设计一个FIR滤波器(二)等文章中,我们讨论了如何设计FIR(Finite Impulse Response Filter),FIR有很多优点,比如 ...

  4. matlab绘制蜂窝,PPT技巧:如何快速设计蜂窝表达的图形设计?

    这个设计还蛮好看的,怎么做出来的呢?牛闪闪给教教吧!这类蜂窝状表达也是目前流行的表达方式之一,牛闪闪把方法交给大家. 场景:企业市场.财务.人事部等需要PPT演示汇报的办公人士. 问题:如何快速设计蜂 ...

  5. db设计专用excel_独家|自卸车如何实现侧板结构快速设计,减少重复工作?

    作者| 张凯 汉阳专用汽车研究所科研技术部工程师 主要从事专用汽车产品结构仿真与轻量化 随着城市发展的步伐不断加快,适用于各种工况的自卸车.城市渣土车市场需求量不断增大. 目前市场自卸车车厢主要有两种 ...

  6. butter滤波器是iir吗_如何快速设计应用一个IIR滤波器

    在小平:如何快速设计应用一个FIR滤波器 中,我们讨论了如何设计一个FIR滤波器,接下来我们介绍IIR滤波器.和设计FIR滤波器一样,我们可以粗略的设计IIR滤波器(幅频响应不精确,设计简单),也可以 ...

  7. 能帮你快速设计好APP的UI kits套装

    能帮你快速设计好APP的UI Kit通常包含了非常全面的资源集合,同时也能让您正确的规划组织结构,您也可以把您创意跟模板结合.UI Kit通常包含了各种模板和ui组件(按钮,复选框,进度条,导航栏等) ...

  8. 使用linux批量引物设计,干货分享:如何快速设计多条qPCR引物?

    原标题:干货分享:如何快速设计多条qPCR引物? 干货分享: 小伙伴们,新的一周已经开始啦,有没有从周末中复苏过来,今天首先让我们来了解一款快速设计多条qPCR引物的数据库. MRPrimer使用篇 ...

  9. 利用ADS快速设计低噪放

    仿真软件的出现,让我们不再需要推导复杂的公式,帮助我们快速且优质地完成射频设计. ADS的DesignGuide里面有各式各样的模板,可以协助我们进行设计.今天我想探讨的是,如何利用DesignGui ...

最新文章

  1. 太形象了!本科、硕士、博士,有什么本质区别?
  2. wxpython多个面板_wxpython:隐藏其中一个拆分窗口面板
  3. 【bzoj2694】Lcm 莫比乌斯反演+线性筛
  4. python类私有函数_python-面向对象-14-私有方法
  5. webclient下载文件 带进度条
  6. 巧用Linux命令完成统计排序功能yes2
  7. 名字英文name域名_企业建站必读:六大方法锁定最佳企业域名
  8. 年底了,各大电商大促会员活动反馈万能模板,必备的PSD分层格式
  9. distinct去重多个字段_sql中去重是distinct还是group by?
  10. 如何用JavaScript搭建神经网络?90分钟免费课程,上手可操作丨教程
  11. 【Spring开发】—— Spring Core
  12. Python入门--字符串的比较
  13. python基础知识点汇总_Python基础知识梳理
  14. MongoDB配置副本集时需要注意的机制
  15. linux vi命令怎么使用方法,Linux下 vi 命令用法
  16. 网络拓扑图js插件——jTopo应用
  17. MTK手机平台及相关
  18. 【计算机组成原理】定点乘法运算之补码一位乘法(Booth算法)(对初学者的步骤详解)
  19. Linux源码解析--从开机加电到main函数
  20. Axure RP8 进度条

热门文章

  1. NASM汇编语言与计算机系统16-保护模式-全局描述符表GDT
  2. Linux-Ubuntu首次使用root账户登录
  3. Tomcat-Server.xml配置图片路径
  4. MIT6.830 lab2 SimpleDB Operators 实验报告
  5. Spring boot 2.4开启静态资源缓存
  6. c语言标准化考试程序报告,在线考试系统-c语言报告.doc
  7. 三维旋转矩阵_旋转之一 - 复数与2D旋转
  8. leftjoin多了性能下降_MySQL 性能优化总结
  9. python灰度图cv2到plt变颜色_python中plt.imshow与cv2.imshow显示颜色问题
  10. app devops建设