利用setSizeConstraint(QLayout::SetFixedSize)方法使对话框尺寸保持相对固定(有控件决定),不能经过拖动改变大小。
extension.h
#ifndef EXTENSION_H #define EXTENSION_H #include <QtGui/QDialog> #include <QWidget> class Extension : public QDialog { Q_OBJECT public: Extension(QWidget *parent = 0, Qt::WFlags flags = 0); ~Extension(); void createBaseInfo(); void createDetaiInfo(); private: QWidget *baseWidget; QWidget *detaiWidget; public slots: void sl_Extension(); }; #endif // EXTENSION_H
extension.cpp
#include "extension.h" #include <QVBoxLayout> #include <QGridLayout> #include <QLabel> #include <QLineEdit> #include <QComboBox> #include <QPushButton> Extension::Extension(QWidget *parent, Qt::WFlags flags) : QDialog(parent, flags) { setWindowTitle(tr("Extension Dialog")); createBaseInfo(); createDetaiInfo(); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(baseWidget); mainLayout->addWidget(detaiWidget); mainLayout->setSpacing(10); mainLayout->setSizeConstraint(QLayout::SetFixedSize); } Extension::~Extension() { } void Extension::createBaseInfo() { baseWidget = new QWidget; QLabel *labName = new QLabel(tr("Name:")); QLabel *labSex = new QLabel(tr("Sex:")); QLineEdit *edtName = new QLineEdit; QComboBox *cbbSex = new QComboBox; cbbSex->insertItem(0,tr("male")); cbbSex->insertItem(1,tr("female")); QPushButton *btnOk = new QPushButton(tr("Ok")); QPushButton *btnDetai = new QPushButton(tr("Detai")); connect(btnDetai,SIGNAL(clicked()),this,SLOT(sl_Extension())); QGridLayout *baseLayout = new QGridLayout(baseWidget); baseLayout->addWidget(labName,0,0); baseLayout->addWidget(edtName,0,1); baseLayout->addWidget(btnOk,0,2); baseLayout->addWidget(labSex,1,0); baseLayout->addWidget(cbbSex,1,1); baseLayout->addWidget(btnDetai,1,2); baseLayout->setMargin(10); baseLayout->setSpacing(10); } void Extension::createDetaiInfo() { detaiWidget = new QWidget; QLabel *labAge = new QLabel(tr("Age:")); QLabel *labDepartment = new QLabel(tr("Department:")); QLabel *labEmail = new QLabel(tr("Email:")); QLineEdit *edtAge = new QLineEdit; QComboBox *cbbDepartment = new QComboBox; cbbDepartment->insertItem(0,tr("Department 1")); cbbDepartment->insertItem(1,tr("Department 2")); cbbDepartment->insertItem(2,tr("Department 3")); QLineEdit *edtEmail = new QLineEdit; QGridLayout *detaiLayout = new QGridLayout(detaiWidget); detaiLayout->addWidget(labAge,0,0); detaiLayout->addWidget(labDepartment,1,0); detaiLayout->addWidget(labEmail,2,0); detaiLayout->addWidget(edtAge,0,1); detaiLayout->addWidget(cbbDepartment,1,1); detaiLayout->addWidget(edtEmail,2,1); detaiLayout->setMargin(10); detaiLayout->setSpacing(10); detaiWidget->hide(); } void Extension::sl_Extension() { if (detaiWidget->isHidden()) { detaiWidget->show(); } else { detaiWidget->hide(); } }