QT5 主窗体对话框的拓展

引言

可拓展对话框主要是由setSizeConstraint(QLayout::SetFixedSize);语句实现的,这条语句固定了各个控件组合的尺寸,在拓展部分显示时,对话框尺寸根据显示的控件调整,在隐藏拓展部分时,对话框恢复至原来大小。

效果图

在这里插入图片描述
单击详细按钮后:
在这里插入图片描述

代码关键步骤已做相关注释

.h文件中将需要用到的几个函数声明,包括基本显示框,拓展框,显示检测

#include <QDialog>

class ExtensionDlg : public QDialog
{
        Q_OBJECT
public:
        ExtensionDlg(QWidget *parent = 0);
        ~ExtensionDlg();

private slots:
        void showDetailInfo();

private:
        void createBaseInfo();           		//实现基本对话窗体部分
        void createDetailInfo();            	//实现扩展窗体部分
        QWidget *baseWidget;                  	//基本对话窗体部分
        QWidget *detailWidget;            		//扩展窗体部分
};

主函数

#include "extensiondlg.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QHBoxLayout>

ExtensionDlg::ExtensionDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("Extension Dialog"));					 //设置对话框的标题栏信息
    createBaseInfo();
    createDetailInfo();
    QVBoxLayout *layout =new QVBoxLayout(this);				//主窗口和拓展窗口垂直布局
    layout->addWidget(baseWidget);							//上面放主窗口
    layout->addWidget(detailWidget);						//下面放拓展窗口
    layout->setSizeConstraint(QLayout::SetFixedSize);		//固定控件尺寸
    layout->setSpacing(10);
}

基本显示窗口


void ExtensionDlg::createBaseInfo()
{
//基本设置
    baseWidget =new QWidget;
    QLabel *nameLabel =new QLabel(tr("姓名:"));
    QLineEdit *nameLineEdit =new QLineEdit;
    QLabel *sexLabel =new QLabel(tr("性别:"));
    QComboBox *sexComboBox =new  QComboBox;
    sexComboBox->insertItem(0,tr("女"));
    sexComboBox->insertItem(1,tr("男"));
    QGridLayout *LeftLayout =new QGridLayout;
    

//布局分为左右两部分,左侧布局为垂直布局
    LeftLayout->addWidget(nameLabel,0,0);
    LeftLayout->addWidget(nameLineEdit,0,1);
    LeftLayout->addWidget(sexLabel);
    LeftLayout->addWidget(sexComboBox);
    
    QPushButton *OKBtn =new QPushButton(tr("确定"));
    QPushButton *DetailBtn =new QPushButton(tr("详细"));
    QDialogButtonBox *btnBox =new QDialogButtonBox(Qt::Vertical);

//buttonBox中放置两个按钮,垂直排列
    btnBox->addButton(OKBtn,QDialogButtonBox::ActionRole);
    btnBox->addButton(DetailBtn,QDialogButtonBox::ActionRole);

//设置整体布局,整体为水平布局,左侧文本框竖排排列,右侧按钮竖排排列,整体横向
    QHBoxLayout *mainLayout =new QHBoxLayout(baseWidget);
    mainLayout->addLayout(LeftLayout);
    mainLayout->addWidget(btnBox);
    connect(DetailBtn,SIGNAL(clicked()),this,SLOT(showDetailInfo()));
}

拓展窗体显示

void ExtensionDlg::createDetailInfo()
{
    detailWidget =new QWidget;
    QLabel *ageLabel =new QLabel(tr("年龄:"));
    QLineEdit *ageLineEdit =new QLineEdit;
    ageLineEdit->setText(tr("30"));
    QLabel *departmentLabel =new QLabel(tr("部门:"));
    QComboBox *departmentComBox =new QComboBox;
    departmentComBox->addItem(tr("部门1"));
    departmentComBox->addItem(tr("部门2"));
    departmentComBox->addItem(tr("部门3"));
    departmentComBox->addItem(tr("部门4"));
    QLabel *emailLabel =new QLabel(tr("email:"));
    QLineEdit *emailLineEdit =new QLineEdit;

//拓展窗口布局,使用布局管理器,放置坐标
    QGridLayout *mainLayout =new QGridLayout(detailWidget);
    mainLayout->addWidget(ageLabel,0,0);
    mainLayout->addWidget(ageLineEdit,0,1);
    mainLayout->addWidget(departmentLabel,1,0);
    mainLayout->addWidget(departmentComBox,1,1);
    mainLayout->addWidget(emailLabel,2,0);
    mainLayout->addWidget(emailLineEdit,2,1);

//默认拓展窗体隐藏
    detailWidget->hide();
}

显示检测,默认隐藏,按钮按下后执行此函数

void ExtensionDlg::showDetailInfo()
{
    if(detailWidget->isHidden())
       detailWidget->show();
    else detailWidget->hide();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值