Qt5开发从入门到精通——第四篇十一节(可扩展对话框)

欢迎小伙伴的点评✨✨,相互学习、互关必回、全天在线🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀


前言

本章节将会给大家带来可扩展对话框的详细使用方法


一、可扩展对话框概述

可扩展对话框通常用于用户对界面有不同要求的场合。通常情况下,只出现基本对话窗体;当供高级用户使用或需要更多信息时,可通过某种方式的切换显示完整对话窗体(扩展窗体),切换的工作通常由一个按钮来实现。
可扩展对话框的基本实现方法是利用 setSizeConstraint(QLayout: :SetFixedSize)方法使对话框尺寸保待相对固定。其中,最关键的部分有以下两点。

  • 在整个对话框的构造函数中调用。
  layout->setSizeConstraint(QLayout::SetFixedSize);

这个设置保证了对话框的尺寸保持相对固定,始终保待各个控件组合的默认尺寸。在扩展部分显示时,对话框尺寸根据需要显示的控件被扩展;而在扩展部分隐藏时,对话框尺寸又恢复至初始状态。

  • 切换按钮的实现。整个窗体可扩展的工作都是在此按钮所连接的槽函数中完成的。

二、效果实例

在这里插入图片描述

三、原码解析

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
private slots:
    void showDetailinfo();
    private:
    void createBaseinfo();       //实现基本对话窗体部分
    void createDetailInfo();    //实现扩展窗体部分
    QWidget *baseWidget;        //基本对话窗体部分
    QWidget *detailWidget;     //扩展窗体部分

};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QHBoxLayout>
Dialog::Dialog(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);
}

Dialog::~Dialog()
{

}

void Dialog::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);
    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 Dialog::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 Dialog::showDetailinfo()
{
    if(detailWidget->isHidden())
        detailWidget->show();
    else detailWidget->hide();
}

main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}


四、总结

可扩展对话框会在应用程序开发中经常用到的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东.'

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

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

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

打赏作者

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

抵扣说明:

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

余额充值