可扩展对话框

 

目录

可扩展对话框setSizeConstraint ()  20210120

实例:

代码及详细注释如下:

【extensiondlg.cpp】

【extensiondlg.h】

【main.cpp】


可扩展对话框setSizeConstraint ()  20210120

在扩展部分显示时,对话框尺寸根据需要显示的控件被扩展;而当扩展部分隐藏时,对话框尺寸又恢复至初始状态。

涉及函数及用法:layout->setSizeConstraint(QLayout::SetFixedSize);

 

实例:

新建:Qt Widgets Application

项目名称:ExtensionDlg

类名:ExtensionDlg

基类:QDialog

不选择“创建界面”

 

代码及详细注释如下:

【extensiondlg.cpp】

#include "extensiondlg.h"

#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QDialogButtonBox>

ExtensionDlg::ExtensionDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("可扩展对话框"));

    createBaseInfo();                                   //创建基本信息页
    createDetailInfo();                                 //详细信息页(呈隐藏状态,需要时扩展显示)
    
    //垂直布局
    QVBoxLayout *layout = new QVBoxLayout(this);        //this
    layout->addWidget(baseWidget);
    layout->addWidget(detailWidget);
    
    layout->setSizeConstraint(QLayout::SetFixedSize);   //对话框窗体大小固定,始终保持各个控件组合的默认尺寸,拖拽不改变大小。
    
    layout->setSpacing(10);                             //间距
}

ExtensionDlg::~ExtensionDlg()
{
}

//基本信息
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("女"));                 //insertItem()或者addItem()
    sexComboBox->insertItem(1,tr("男"));
    
    //左边:网格布局
    QGridLayout *LeftLayout = new QGridLayout;
    LeftLayout->addWidget(nameLabel,0,0);
    LeftLayout->addWidget(nameLineEdit,0,1);
    LeftLayout->addWidget(sexLabel,1,0);
    LeftLayout->addWidget(sexComboBox,1,1);

    QPushButton *OkBtn = new QPushButton(tr("确定"));     //QPushButton *OkBtn = new QPushButton;
    QPushButton *DetailBtn = new QPushButton(tr("详细")); //QPushButton *DetailBtn = new QPushButton;

    QDialogButtonBox *btnBox = new QDialogButtonBox(Qt::Vertical);
    btnBox->addButton(OkBtn,QDialogButtonBox::ActionRole);//ActionRole
    btnBox->addButton(DetailBtn,QDialogButtonBox::ActionRole);

    //整体:水平布局
    QHBoxLayout *mainLayout = new QHBoxLayout(baseWidget);//baseWidget一定要加上
    mainLayout->addLayout(LeftLayout);                    //addLayout()布局
    mainLayout->addWidget(btnBox);                        //addWidget()控件

    //按钮关联事件
    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("23"));

    QLabel *departmentLabel = new QLabel(tr("部门:"));
    QComboBox *departmentComboBox = new QComboBox;
    departmentComboBox->addItem(tr("工程室"));                 //addItem()或者insertItem()
    departmentComboBox->addItem(tr("采购室"));
    departmentComboBox->addItem(tr("计划室"));
    departmentComboBox->addItem(tr("财务室"));
    QLabel *emailLabel = new QLabel(tr("邮箱:"));
    QLineEdit *emailLineEdit = new QLineEdit;

    //网格布局
    QGridLayout *mainLayout = new QGridLayout(detailWidget);  //detailWidget一定要加上
    mainLayout->addWidget(ageLabel,0,0);
    mainLayout->addWidget(ageLineEdit,0,1);
    mainLayout->addWidget(departmentLabel,1,0);
    mainLayout->addWidget(departmentComboBox,1,1);
    mainLayout->addWidget(emailLabel,2,0);
    mainLayout->addWidget(emailLineEdit,2,1);

    detailWidget->hide();
}

void ExtensionDlg::showDetailInfo()
{
    if(detailWidget->isHidden())
        detailWidget->show();                               //显示detailWidget窗体
    else
        detailWidget->hide();                               //隐藏detailWidget窗体
}

【extensiondlg.h】

#ifndef EXTENSIONDLG_H
#define EXTENSIONDLG_H

#include <QDialog>

class ExtensionDlg : public QDialog     //ExtensionDlg类继承自QDialog类
{
    Q_OBJECT                            //Q_OBJECT是个宏。作用是启动Qt5元对象系统的一些特性(如支持信号和槽等)。它必须放在类定义的私有区中。

public:
    ExtensionDlg(QWidget *parent = 0);
    ~ExtensionDlg();

private:
    void createBaseInfo();
    void createDetailInfo();

    QWidget *baseWidget;
    QWidget *detailWidget;

private slots:
    void showDetailInfo();
};
#endif // EXTENSIONDLG_H

【main.cpp】

#include "extensiondlg.h"           //使用哪个类就必须把包含该类的头文件引用过来(*.h文件中包含了相应类的定义)

#include <QApplication>             //每个使用[Qt图形化应用程序]中都必须使用一个QApplication对象
                                    //QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等

int main(int argc, char *argv[])    //这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。
                                    //所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{
    QApplication a(argc, argv);     // a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少

    ExtensionDlg w;                 //创建ExtensionDlg类的对象(包含该类头文件)
    w.show();                       //窗口部件可见

    return a.exec();                //main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。
                                    //exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢奕冰2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值