1、linux下安装Qt4请参考如下博文:

Qt4在linux下的安装

2、Qt4工程的创建请参考如下博文:

Qt4创建工程的几种方法:linux系统

3、可扩展对话框

通过纯代码的形式,建立工程。点击【Detail】按钮,显示扩展对话框

包括四部分:

工程文件:ExtensionDlg.pro

主程序文件:main.cpp

对话框类:ExtensionDlg.h

实现文件:ExtensionDlg.cpp

4、实例运行效果:

5、代码区:

main()函数

#include <QApplication>
#include "ExtensionDlg.h" int main(int argc, char* argv[])
{
QApplication app(argc, argv);
ExtensionDlg exDlg;
exDlg.show();
return app.exec();
}

ExtensionDlg.h文件

#ifndef EXTENSIONDLG_H
#define EXTENSIONDLG_H
#include <QtGui> class ExtensionDlg:public QDialog
{
Q_OBJECT //加入Q——OBJECT宏,程序中用到信号/槽等Qt核心机制的,都需要加入此宏
public:
ExtensionDlg(); //构造函数
void initBasicInfo(); //初始化基础信息
void initDetailInfo(); //初始化扩展信息
public slots: //声明共有槽
void slot2Extension(); //单击Detail按钮是被触发
private:
QWidget* baseWidget; //伸缩前对话框窗体,必须为指针
QWidget* detailWidget; //扩展后对话框窗体,必须为指针
}; #endif // EXTENSIONDLG_H

ExtensionDlg.cpp文件

#include "ExtensionDlg.h"

ExtensionDlg::ExtensionDlg()
{
setWindowTitle(tr("Extension Dialog")); //显示标题
initBasicInfo(); //初始化基本信息窗体
initDetailInfo(); //初始化扩展信息窗体 QVBoxLayout* layout = new QVBoxLayout; //定义一个垂直布局类实体,QHBoxLayout为水平布局类实体
layout->addWidget(baseWidget); //加入baseWidget
layout->addWidget(detailWidget); //加入DetailWidget
layout->setSizeConstraint(QLayout::SetFixedSize); //设置窗体缩放模式,此处设置为固定大小
layout->setSpacing(6); //窗口部件之间间隔大小
setLayout(layout); //加载到窗体上
} void ExtensionDlg::initBasicInfo()
{
baseWidget = new QWidget; //实例化baseWidget
QLabel* nameLabel = new QLabel(tr("Name")); //定义窗体部件
QLineEdit* nameEdit = new QLineEdit;
QLabel* sexLabel = new QLabel(tr("Sex"));
QComboBox* sexComboBox = new QComboBox; sexComboBox->addItem(tr("male"));
sexComboBox->addItem(tr("female")); QPushButton* okButton = new QPushButton(tr("OK"));
QPushButton* detailButton = new QPushButton(tr("Detail")); connect(detailButton, SIGNAL(clicked()), this, SLOT(slot2Extension())); //使用信号/槽机制 QDialogButtonBox* btnBox = new QDialogButtonBox(Qt::Horizontal); //QDialogButtonBox使用方法
btnBox->addButton(okButton, QDialogButtonBox::ActionRole);
btnBox->addButton(detailButton, QDialogButtonBox::ActionRole); QFormLayout* formLayout = new QFormLayout; //表单布局方法
formLayout->addRow(nameLabel, nameEdit);
formLayout->addRow(sexLabel, sexComboBox); QVBoxLayout* vboxLayout = new QVBoxLayout; //窗体顶级布局,布局本身也是一种窗口部件
vboxLayout->addLayout(formLayout); //顶层窗体加入表单
vboxLayout->addWidget(btnBox); //顶层窗体加入按钮
baseWidget->setLayout(vboxLayout); //加载到窗体上
} void ExtensionDlg::initDetailInfo()
{
detailWidget = new QWidget;
QLabel* ageLabel = new QLabel(tr("Age"));
QLineEdit* ageEdit = new QLineEdit;
ageEdit->setText(tr("25"));
QLabel* deptLabel = new QLabel(tr("Department"));
QComboBox* deptComboBox = new QComboBox; deptComboBox->addItem(tr("department 1"));
deptComboBox->addItem(tr("department 2"));
deptComboBox->addItem(tr("department 3"));
deptComboBox->addItem(tr("department 4")); QLabel* addressLabel = new QLabel(tr("Address"));
QLineEdit* addressEdit = new QLineEdit;
QFormLayout* formLayout = new QFormLayout;
formLayout->addRow(ageLabel, ageEdit);
formLayout->addRow(deptLabel, deptComboBox);
formLayout->addRow(addressLabel, addressEdit); detailWidget->setLayout(formLayout);
detailWidget->hide(); //将扩展信息窗口隐藏,hide()是Qt默认槽函数之一
} void ExtensionDlg::slot2Extension()
{
if(detailWidget->isHidden()) //ishidden()函数判断扩展窗口显隐状态
detailWidget->show();
else
detailWidget->hide();
}

ExtensionDlg.pro文件

TEMPLATE = app
TARGET =
DEPENDPATH +=
INCLUDEPATH +=
# Input
HEADERS += \
ExtensionDlg.h SOURCES += \
ExtensionDlg.cpp \
main.cpp

Qt4----子例化QDialog(可扩展对话框的使用)的更多相关文章

  1. Qt4--加密日记本(子例化QMainWindow文本加密解密)

    近来刚学习Qt4编程,想找个实例练习练习,于是产生了一个想法,就是怎么样做一个文本加密,这样,自己保存的一些文档可以通过软件 生成加密文本,到时候要看的时候,通过自己的软件读取就可以.既然有想法了,那 ...

  2. QT中实现应用程序的单例化

    一介绍 通过编写一个QSingleApplication类,来实现Qt程序的单例化,原文的作者是在Windows Vista + Qt4.4 下实现的,不过应用在其他平台上是没问题的.(本文是我在ht ...

  3. 利用python自动生成verilog模块例化模板

    一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受“利奇马”的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口动不动就几十上百个, ...

  4. 62.在cdc文件上某些例化模块看不到的原因

    比如在顶层文件中,例化了几个模块,综合后打开cdc文件,会在structure/net中少几个例化模块,即看不到,但在顶层文件中还是存在的,只是ISE软件综合的问题而已,原因是在顶层或子模块中,有些应 ...

  5. Quartus中例化工程

    一般的例化工程,需要将要例化的对象的硬件语言放入到当前工程中,比如A要例化B,需要将B的编程文件加入当前工程进来. 还有一种方法不用这么麻烦,A工程用要例化B时,在library添加B的工程路径,就可 ...

  6. testbench中$display查看例化model里面信号方法以及$realtime用法

    前言 此为测试语法,不可综合: 流程: 1.在tb中可以这么写,检测clk_t_en的高电平,输出仿真时间位置,想查看的cnt_t是底层模块中的.这么会使得时间延迟一个周期: always @(pos ...

  7. Vscode生成verilog例化

    前言 手动例化又慢又容易出错,孩子老犯错怎么办? 当然是脚本一劳永逸. 流程 (1)在vscode中安装如下插件. (2)在电脑中安装python3以上的环境. 下载地址:https://www.py ...

  8. FPGA例化ROM存储表格

    FPGA例化ROM存储表格 1.选择ROM 2.填写数据位宽和深度 3.加载ROM初始化信息,coe文件

  9. Kotlin入门(28)Application单例化

    Application是Android的又一大组件,在App运行过程中,有且仅有一个Application对象贯穿应用的整个生命周期,所以适合在Application中保存应用运行时的全局变量.而开展 ...

随机推荐

  1. Apache的Mod_rewrite学习(RewriteRule重写规则的语法)

    URL:http://www.tenwe.com/tech/web/server/200705/content_1548.shtml 今天学习重写规则的语法.RewriteRuleSyntax: Re ...

  2. QComboBox 添加图片(自带addItem函数就有这个功能,从没有注意过)

    方法:    使用 QComboxBox::addItem(QIcon, QString); 示例: 点击(此处)折叠或打开 QComboBox *combo_status = new QComboB ...

  3. JavaScript螺纹的问题和答案

    要求: JavaScript是单线程的,有任务队列.比方使用setTimeou(func,secs)来在secs毫秒后向任务队列加入func.可是,setTimeout后面跟一个死循环,那么死循环导致 ...

  4. android Graphics(三):区域(Range)

    前言:最近几天对画图的研究有些缓慢,项目开始写代码了,只能在晚上空闲的时候捯饬一下自己的东西,今天给大家讲讲区域的相关知识,已经想好后面两篇的内容了,这几天有时间赶紧写出来给大家.有关界面开发的东东内 ...

  5. [Swust OJ 648]--简单字典(数位dp)

    题目链接:http://acm.swust.edu.cn/problem/0648/ Time limit(ms): 1000 Memory limit(kb): 65535   有这样一本字典,它每 ...

  6. ZOJ 3778 Talented Chef 模拟 [ 祝愿明天省赛一帆风顺, ZJSU_Bloom WILL WIN : )

    这题的意思是给你 n 道菜,第 i 道菜需要 Ai 步才能完成 每次你能对 m 道菜分别完成一步,请问最少需要几次? 这题暴力写肯定是不行的,去年省赛的时候就是没写出来这题,今天再把思路理一理吧. 首 ...

  7. select()函数详解

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是 习惯写诸如connect. accept.recv或recvfrom这样的阻塞程 ...

  8. 基于visual Studio2013解决C语言竞赛题之0604二维数组置换

     题目

  9. mysql 从5.1升级到5.5.33 后 innodb 表出错 及 innodb表修复

    服务器使用的是mysql 5.1,了解到 5.5 系列的版本 innodb 的性能有很大提升,就想升级下.按照查到的步骤: http://www.myhack58.com/Article/sort09 ...

  10. Thinkphp里import的几个使用方法介绍

    以下附上import的几个使用方法介绍 1.使用方法一 import('@.Test.Translate'); @,表示项目根文件夹.假定根文件夹是:App/ 导入类库的路径是:App/Lib/Tes ...