Qt学习笔记——可扩展对话框

可扩展对话框,无非就是扩展部分的隐藏与显示,通过按钮点击来切换扩展部分的状态

 

有个重要点需要注意:

主窗口的layout需要设置固定大小,也就是

layout->setSizeConstraint(QLayout::SetFixedSize);

 

如果没有设置固定大小,那么窗口从第一次扩展后,收回扩展部分将不会缩小窗口

设置了固定大小的效果                                                                     没有设置的效果

                           

贴一下代码:

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    void initFirstWidget();
    void initExtensionWidget();
private slots:
    void showExtensionWidget();

private:
    QWidget * firstWidget;
    QWidget * extensionWidget;
};
#include "widget.h"
#include <QtWidgets>

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    initFirstWidget();
    initExtensionWidget();

    QVBoxLayout * layout = new QVBoxLayout(this);

    //重点!可扩展对话框最关键部分
    layout->setSizeConstraint(QLayout::SetFixedSize);
    layout->addWidget(firstWidget);
    layout->addWidget(extensionWidget);

    setLayout(layout);

}

Widget::~Widget()
{

}

void Widget::initFirstWidget()
{
    firstWidget = new QWidget;
    firstWidget->setFixedSize(200, 50);

    QPushButton * extensionBtn = new QPushButton(firstWidget);
    extensionBtn->setText("详细信息...");

    QHBoxLayout * layout = new QHBoxLayout(firstWidget);
    layout->addStretch(1);
    layout->addWidget(extensionBtn);

    connect(extensionBtn, SIGNAL(clicked(bool)), this, SLOT(showExtensionWidget()));

    firstWidget->setLayout(layout);
}

void Widget::initExtensionWidget()
{
    extensionWidget = new QWidget;
    extensionWidget->setFixedSize(200, 100);

    QTextEdit * textEdit = new QTextEdit(extensionWidget);

    QPushButton * exitBtn = new QPushButton(extensionWidget);
    exitBtn->setText("退出");
    QHBoxLayout * btnLayout = new QHBoxLayout;
    btnLayout->addStretch(1);
    btnLayout->addWidget(exitBtn);

    QVBoxLayout * layout = new QVBoxLayout(extensionWidget);
    layout->addWidget(textEdit);
    layout->addLayout(btnLayout);

    connect(exitBtn, SIGNAL(clicked(bool)), this, SLOT(close()));

    extensionWidget->setLayout(layout);
    extensionWidget->hide();   //隐藏控件
}

void Widget::showExtensionWidget()
{
    if(extensionWidget->isHidden()){
        extensionWidget->show();
    }else{
        extensionWidget->hide();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值