欢迎小伙伴的点评✨✨,相互学习、互关必回、全天在线🍳🍳🍳
博主🧑🧑 本着开源的精神交流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();
}
四、总结
可扩展对话框会在应用程序开发中经常用到的