对话框,之所以被成为对话框,是因为它们为用户和应用程序之间提供了一种可以相互“交谈”的交互方式。
  绝大多数的图形用户界面应用程序都带有一个有菜单栏、工具栏构成的主窗口以及几十个对主窗口进行补充的对话框。
手写一个对话框;
  对话框上控件的生成和布局可以使用代码生成也可以使用设计师模式下的UI来生成;

代码实现控件布局-查找对话框


finddialog.h

#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QDialog>class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;class FindDialog : public QDialog{Q_OBJECT
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_H

finddialog.cpp

#include "finddialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>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"));QObject::connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(enableFindButton(QString)));QObject::connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));QObject::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());
}

快速设计对话框

  Qt的设计初衷就是为了能够直观并且友好的进行手工编码。使用可视化方式会比手工编码显得更自然、更快速,并且也希望能够通过可视化,对那些手工编码所设计的窗体,进行更快速、更容易的测试和修改。
  Qt设计师(Qt Designer)提供一种可视化的设计能力。使用Qt设计师所创建的窗体最终仍旧是C++代码。
  无论是使用手工编码还是使用Qt设计师,在创建对话框时总是要包含以下这几个相同的基本步骤:
    1.创建并初始化子窗口部件。
    2.把子窗口部件放到布局中。
    3.设置Tab键顺序。
    4.建立信号-槽之间的连接。
    5.实现对话框中的自定义槽。
  具体步骤:
  1.拖入一个Label标签,设置objectName属性为“label”,text属性设置为“&Cell Location”;
  2.拖入一个lineEdit行编辑器,设置objectName属性为“lineEdit”;
  3.拖入第一个按钮PushButton,设置objectName属性为“okButton”,设置enable属性为“false”,设置text属性为“OK”,设置default属性为“true”;
  4.拖入第二个按钮PushButton,设置objectName属性为“cancelButton”,设置text属性为“GoToCellDialog”,设置windowTitle属性为“Go to Cell”。
  对控件进行布局。
    1.选择label标签和lineEdit行编辑器两个控件,生成水平布局HorizonLayout;
    2.选择分隔符和两个按钮,同样生成水平布局HorizonLayout;
    3.在窗体上,右键菜单中“布局”选择“垂直布局”和“调整大小”,窗体会自动调整到一个合适的长宽尺寸。

  使用“Edit Tab Order”设置焦点顺序,在活动控件上,按照希望的顺序依次点击每个控件,就会出现从1开始的焦点顺序。

  在Label中设置的“&”是一种快捷键,在“Edit Buddies”设置窗口部件伙伴(buddy)后,显示就不会再出现“&”符
号,会把行编辑器看成是label标签的伙伴。

  对项目进行构建后,用户界面编译器(user interface compiler,uic)将gotocelldialog.ui文件转换成C++并且将转换结果存储在ui_gotocelldialog.h文件中。
  之前UI实现的界面上的控件创建和信号槽连接,需要另外实现功能代码就需要另外使用继承QDialog类和依赖UI生成的类,来实现缺失的业务功能的代码逻辑。
  在构造函数中,调用setupUi()函数来初始化窗体。由于Ui::GoToCellDialog中的成员对象都会public类型,所以可以直接访问Ui::GoToCellDialog中的成员对象;setupUi()函数会自动将那些符合on_objectName_signalName()命名惯例的任意槽与相应的objectName和signalName()信号连接到一起。

connect(lineEdit,SIGNAL(textChanged(const QString&)),this,SLOT(on_lineEdit_textChanged()));

gotocelldialog.cpp

#include "gotocelldialog.h"
#include "ui_gotocelldialog.h"
#include <QRegularExpressionValidator>
#include <QRegularExpression>
GoToCellDialog::GoToCellDialog(QWidget *parent) :QDialog(parent),ui(new Ui::GoToCellDialog)
{ui->setupUi(this);QRegularExpression regExp("[A-Za-z][1-9][0-9]{0,2}");ui->lineEdit->setValidator(new QRegularExpressionValidator(regExp,this));QObject::connect(ui->okButton,SIGNAL(clicked()),this,SLOT(accpet()));QObject::connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
}
GoToCellDialog::~GoToCellDialog()
{delete ui;
}
void GoToCellDialog::on_lineEdit_textChanged(const QString &arg1)
{ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
}

学习《GUI Qt4 编程》笔记-02-代码实现控件布局-设计师控件布局相关推荐

  1. asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02

    本文主要梳理<对比Excel,轻松学习SQL数据分析>对于自己有用的sql知识.这本书中的所有代码和函数均适用于my sql 8.0版本. SQL的基本功能数据定义(DDL)--对数据库, ...

  2. Python GUI界面编程初步 02 - Tkinter基础

    前言: 前一篇我们大致介绍了Python编程的几个常用的GUI的工具和库.现在我们开始用其中的几个进行GUI设计. 考虑到,现在有一个项目包括传统的GUI编程,同时客户需要比较完备的图形显示,而这个又 ...

  3. d模板元编程笔记02

    元 元名(T,U,V) 如 (限制条件 T, U 或 V) {... }元 限制(T)如 (是(T : 整)) { /*...*/ } // #1 元 限制(T)如 (是(T : 串)) { /*.. ...

  4. linux系统编程笔记02——Linux命令:修改文件权限命令chmod、chgrp、chown详解

    Linux命令:修改文件权限命令chmod.chgrp.chown详解 Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限 ...

  5. C++ GUI Qt4编程(12)-6.1FindFileDialog

    1. 主要介绍了QGridLayout, QHBoxLayout, QVBoxLayout3种布局管理器的使用方法. 2. 在linux中,继承自QDialog的对话框,没有最大化.最小化.关闭按钮, ...

  6. C++ Gui Qt4 书籍代码在VS2008上正确编译使用

    实际用VS2008上的QT菜单可以直接打开以前Qmake编译的.pro项目文件.无需下面的步骤. 继续摸索中,貌似由qmake转换成add_in模式,智能提示有点问题,.... =========== ...

  7. Matlab GUI界面编程小白学习笔记

    某个天朗气清的下午,老师给我布置了一个Matlab GUI 界面设计的任务,然后欢天喜地回家结婚去了,留我在美好的假期里继续孤零零地在学校里耕耘.好的,在此先祝贺老师新婚快乐,百年好合.然后咱们开始从 ...

  8. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  9. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

最新文章

  1. 物理服务器对应多个虚拟节点,一台物理机如何开多个云服务器
  2. java中的asList_Java中的Arrays.asList()方法
  3. 反思 大班 快乐的机器人_幼儿园大班教案《快乐的桌椅》含反思
  4. Xna环境在PC平台下的功能扩展
  5. 《Web测试囧事》——1.3 测试Web Service能否正常提供JSON数据
  6. 128道软件测试面试题,面试及答案,视频讲解
  7. 计算机网络第七版笔记--第二章
  8. miui10,miui11,miui12 rom下载,支持市面常见机型
  9. WordPress强大多功能主题模板The7 v9.16.0 已激活版本完全兼容大多数插件
  10. CMake入门使用(一)安装及HelloWorld的构建
  11. openwrt + dnsmasq + anti-AD 两步搞定广告屏蔽
  12. ZJM 与纸条(KMP算法)
  13. 后端 php mysql_搭建并部署PHP + MySQL后端环境
  14. 数组、链表、哈希、队列、栈数据结构特点,各自优点和缺点
  15. 注意力机制——Spatial Transformer Networks(STN)
  16. 如何开搓饵不掉钩_钓鱼技巧!学会这4步!看懂搓饵装钩方法!
  17. matlab 算 cramer s v,基于Cramer’s V指数的遥感影像特征选择方法专利_专利查询 - 天眼查...
  18. CATIA V5R21 Win10 64bit安装教程
  19. 重庆华为服务器安装步骤
  20. Java并发编程(四):计算机基础-门电路与加法器

热门文章

  1. 仁、义、礼、智、信、衷、孝、节、勇、和
  2. 计算机初级操作员试题汇编,计算机初级操作员试卷.doc
  3. 手机建站系统php,zzzcms免费开源建站系统含手机
  4. 简单四步抓取腾讯视频MP4文件
  5. 10款idea神级插件,生产力必备神器!
  6. GHT(广义霍夫曼变换)
  7. 经典神经网络分类器之BP算法和自组织竞争网络
  8. 什么是优秀的用户体验:解读40个优秀界面设计
  9. php 中文加密如何解密,求教PHP中文加密解密代码
  10. cad中能够既刷新视图又能刷新计算机图形数据库,建筑CAD练习题.doc