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();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_15710245/article/details/83661659