Qt 实现可扩展对话框

  1. http://blog.csdn.net/duxinfeng2010/article/details/8229033

实现效果:


  


  


代码

  1. 1.extension.h文件  
  2.   
  3. #ifndef EXTENSION_H   
  4. #define EXTENSION_H   
  5. #include <QApplication>   
  6. #include <QPushButton>   
  7. #include <QDialog>   
  8. #include <QGridLayout>   
  9. #include <QWidget>   
  10. #include <QHBoxLayout>   
  11. #include <QLabel>   
  12. #include <QLineEdit>   
  13. #include <QComboBox>   
  14. #include <QDialogButtonBox>   
  15. #include <QGridLayout>   
  16. #include <QDialog>   
  17.   
  18. class Extension : public QDialog  
  19. {  
  20.     Q_OBJECT  
  21. public:  
  22.     Extension(QWidget *parent=0);  
  23.     void createBaseInfo();  
  24.     void createDetailInfo();  
  25. public slots:  
  26.     void slotExtension();  
  27. private:  
  28.     QWidget *baseWidget;  
  29.     QWidget *detailWidget;  
  30.       
  31. };  
  32.   
  33. #endif // EXTENSION_H  
1.extension.h文件

#ifndef EXTENSION_H
#define EXTENSION_H
#include <QApplication>
#include <QPushButton>
#include <QDialog>
#include <QGridLayout>
#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QDialog>

class Extension : public QDialog
{
    Q_OBJECT
public:
    Extension(QWidget *parent=0);
    void createBaseInfo();
    void createDetailInfo();
public slots:
    void slotExtension();
private:
    QWidget *baseWidget;
    QWidget *detailWidget;
    
};

#endif // EXTENSION_H
  1. 2extension.cpp文件  
  2.   
  3. #include "extension.h"   
  4.   
  5. Extension::Extension(QWidget *parent):QDialog(parent)  
  6. {  
  7.     setWindowTitle(tr("Extension Dialog"));  
  8.   
  9.     createBaseInfo();  
  10.     createDetailInfo();  
  11.   
  12.     QVBoxLayout *layout=new QVBoxLayout;  
  13.     layout->addWidget(baseWidget);  
  14.     layout->addWidget(detailWidget);  
  15.     layout->setSizeConstraint(QLayout::SetFixedSize);  
  16.     layout->setSpacing(10);  
  17.     setLayout(layout);  
  18.   
  19. }  
  20.   
  21.   
  22. void Extension::createBaseInfo()  
  23. {  
  24.     baseWidget=new QWidget;  
  25.   
  26.     QLabel *nameLabel = new QLabel(tr("Name:"));  
  27.     QLineEdit *nameEdit = new QLineEdit;  
  28.     QLabel *sexLabel = new QLabel(tr("Sex:"));  
  29.     QComboBox *sexComboBox = new QComboBox;  
  30.     sexComboBox->addItem("male");  
  31.     sexComboBox->addItem("female");  
  32.   
  33.   
  34.     QPushButton *okButton = new QPushButton(tr("OK"));  
  35.     QPushButton *detailButton = new QPushButton(tr("Detail"));  
  36.     connect(detailButton,SIGNAL(clicked()),this,SLOT(slotExtension()));  
  37.   
  38.   
  39.     QDialogButtonBox *btnBox = new QDialogButtonBox(Qt::Vertical);  
  40.     btnBox->addButton(okButton,QDialogButtonBox::ActionRole);  
  41.     btnBox->addButton(detailButton,QDialogButtonBox::ActionRole);  
  42.   
  43.      
  44.     QGridLayout *gride = new QGridLayout;  
  45.     gride->addWidget(nameLabel,0,0);  
  46.     gride->addWidget(nameEdit,0,1);  
  47.     gride->addWidget(sexLabel,1,0);  
  48.     gride->addWidget(sexComboBox,1,1);  
  49.   
  50.   
  51.     QHBoxLayout *hbox = new QHBoxLayout;  
  52.     hbox->addLayout(gride);  
  53.     hbox->addStretch();  
  54.     hbox->addWidget(btnBox);  
  55.     baseWidget->setLayout(hbox);  
  56.      
  57.   
  58. }  
  59.   
  60. void Extension::createDetailInfo()  
  61. {  
  62.     detailWidget = new QWidget;  
  63.   
  64.     QLabel *label1 = new QLabel(tr("Age"));  
  65.     QLineEdit *ageEdit = new QLineEdit;  
  66.     ageEdit->setText("30");  
  67.     QLabel *label2 = new QLabel(tr("Department"));  
  68.     QComboBox *deptComboBox = new QComboBox;  
  69.     deptComboBox->addItem(tr("dept 1"));  
  70.     deptComboBox->addItem(tr("dept 2"));  
  71.     deptComboBox->addItem(tr("dept 3"));  
  72.     deptComboBox->addItem(tr("dept 4"));  
  73.     QLabel *label3 = new QLabel(tr("email:"));  
  74.     QLineEdit *edit = new QLineEdit;  
  75.   
  76.       
  77.     QGridLayout *grid = new QGridLayout;  
  78.     grid->addWidget(label1,0,0);  
  79.     grid->addWidget(ageEdit,0,1);  
  80.     grid->addWidget(label2,1,0);  
  81.     grid->addWidget(deptComboBox,1,1);  
  82.     grid->addWidget(label3,2,0);  
  83.     grid->addWidget(edit,2,1);  
  84.   
  85.     detailWidget->setLayout(grid);  
  86.      
  87.     detailWidget->hide();  
  88.   
  89. }  
  90.   
  91.   
  92. void Extension::slotExtension()  
  93. {  
  94.     if(detailWidget->isHidden())  
  95.     {  
  96.         detailWidget->show();  
  97.     }  
  98.     else  
  99.     {  
  100.         detailWidget->hide();  
  101.     }  
  102. }  
2extension.cpp文件

#include "extension.h"

Extension::Extension(QWidget *parent):QDialog(parent)
{
    setWindowTitle(tr("Extension Dialog"));

    createBaseInfo();
    createDetailInfo();

    QVBoxLayout *layout=new QVBoxLayout;
    layout->addWidget(baseWidget);
    layout->addWidget(detailWidget);
    layout->setSizeConstraint(QLayout::SetFixedSize);
    layout->setSpacing(10);
    setLayout(layout);

}


void Extension::createBaseInfo()
{
    baseWidget=new QWidget;

    QLabel *nameLabel = new QLabel(tr("Name:"));
    QLineEdit *nameEdit = new QLineEdit;
    QLabel *sexLabel = new QLabel(tr("Sex:"));
    QComboBox *sexComboBox = new QComboBox;
    sexComboBox->addItem("male");
    sexComboBox->addItem("female");


    QPushButton *okButton = new QPushButton(tr("OK"));
    QPushButton *detailButton = new QPushButton(tr("Detail"));
    connect(detailButton,SIGNAL(clicked()),this,SLOT(slotExtension()));


    QDialogButtonBox *btnBox = new QDialogButtonBox(Qt::Vertical);
    btnBox->addButton(okButton,QDialogButtonBox::ActionRole);
    btnBox->addButton(detailButton,QDialogButtonBox::ActionRole);

   
    QGridLayout *gride = new QGridLayout;
    gride->addWidget(nameLabel,0,0);
    gride->addWidget(nameEdit,0,1);
    gride->addWidget(sexLabel,1,0);
    gride->addWidget(sexComboBox,1,1);


    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addLayout(gride);
    hbox->addStretch();
    hbox->addWidget(btnBox);
    baseWidget->setLayout(hbox);
   

}

void Extension::createDetailInfo()
{
    detailWidget = new QWidget;

    QLabel *label1 = new QLabel(tr("Age"));
    QLineEdit *ageEdit = new QLineEdit;
    ageEdit->setText("30");
    QLabel *label2 = new QLabel(tr("Department"));
    QComboBox *deptComboBox = new QComboBox;
    deptComboBox->addItem(tr("dept 1"));
    deptComboBox->addItem(tr("dept 2"));
    deptComboBox->addItem(tr("dept 3"));
    deptComboBox->addItem(tr("dept 4"));
    QLabel *label3 = new QLabel(tr("email:"));
    QLineEdit *edit = new QLineEdit;

    
    QGridLayout *grid = new QGridLayout;
    grid->addWidget(label1,0,0);
    grid->addWidget(ageEdit,0,1);
    grid->addWidget(label2,1,0);
    grid->addWidget(deptComboBox,1,1);
    grid->addWidget(label3,2,0);
    grid->addWidget(edit,2,1);

    detailWidget->setLayout(grid);
   
    detailWidget->hide();

}


void Extension::slotExtension()
{
    if(detailWidget->isHidden())
    {
        detailWidget->show();
    }
    else
    {
        detailWidget->hide();
    }
}


  1. 3.main.cpp文件  
  2. #include<QApplication>   
  3. #include"extension.h"   
  4.   
  5. int main(int argc,char *argv[])  
  6. {  
  7.     QApplication app(argc,argv);  
  8.     Extension exten;  
  9.     exten.show();  
  10.     return app.exec();  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值