Qt4----子例化QDialog(可擴展對話框的使用)


1、linux下安裝Qt4請參考如下博文:

Qt4在linux下的安裝


2、Qt4工程的創建請參考如下博文:

Qt4創建工程的幾種方法:linux系統


3、可擴展對話框

通過純代碼的形式,建立工程。點擊【Detail】按鈕,顯示擴展對話框

包括四部分:

工程文件:ExtensionDlg.pro

主程序文件:main.cpp

對話框類:ExtensionDlg.h

實現文件:ExtensionDlg.cpp


4、實例運行效果:




5、代碼區:


main()函數

 

#include <QApplication>
#include "ExtensionDlg.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    ExtensionDlg exDlg;
    exDlg.show();
    return app.exec();
}

 


ExtensionDlg.h文件

 

#ifndef EXTENSIONDLG_H
#define EXTENSIONDLG_H
#include <QtGui>

class ExtensionDlg:public QDialog
{
    Q_OBJECT    //加入Q——OBJECT宏,程序中用到信號/槽等Qt核心機制的,都需要加入此宏
public:
    ExtensionDlg();         //構造函數
    void initBasicInfo();   //初始化基礎信息
    void initDetailInfo();  //初始化擴展信息
public slots:               //聲明共有槽
    void slot2Extension();  //單擊Detail按鈕是被觸發
private:
    QWidget* baseWidget;     //伸縮前對話框窗體,必須為指針
    QWidget* detailWidget;   //擴展后對話框窗體,必須為指針
};

#endif // EXTENSIONDLG_H

 

 

ExtensionDlg.cpp文件

#include "ExtensionDlg.h"

ExtensionDlg::ExtensionDlg()
{
    setWindowTitle(tr("Extension Dialog"));             //顯示標題
    initBasicInfo();                                    //初始化基本信息窗體
    initDetailInfo();                                   //初始化擴展信息窗體

    QVBoxLayout* layout = new QVBoxLayout;              //定義一個垂直布局類實體,QHBoxLayout為水平布局類實體
    layout->addWidget(baseWidget);                      //加入baseWidget
    layout->addWidget(detailWidget);                    //加入DetailWidget
    layout->setSizeConstraint(QLayout::SetFixedSize);   //設置窗體縮放模式,此處設置為固定大小
    layout->setSpacing(6);                              //窗口部件之間間隔大小
    setLayout(layout);                                  //加載到窗體上
}

void ExtensionDlg::initBasicInfo()
{
    baseWidget = new QWidget;                           //實例化baseWidget
    QLabel* nameLabel = new QLabel(tr("Name"));         //定義窗體部件
    QLineEdit* nameEdit = new QLineEdit;
    QLabel* sexLabel = new QLabel(tr("Sex"));
    QComboBox* sexComboBox = new QComboBox;

    sexComboBox->addItem(tr("male"));
    sexComboBox->addItem(tr("female"));

    QPushButton* okButton = new QPushButton(tr("OK"));
    QPushButton* detailButton = new QPushButton(tr("Detail"));

    connect(detailButton, SIGNAL(clicked()), this, SLOT(slot2Extension())); //使用信號/槽機制

    QDialogButtonBox* btnBox = new QDialogButtonBox(Qt::Horizontal);        //QDialogButtonBox使用方法
    btnBox->addButton(okButton, QDialogButtonBox::ActionRole);
    btnBox->addButton(detailButton, QDialogButtonBox::ActionRole);

    QFormLayout* formLayout = new QFormLayout;          //表單布局方法
    formLayout->addRow(nameLabel, nameEdit);
    formLayout->addRow(sexLabel, sexComboBox);

    QVBoxLayout* vboxLayout = new QVBoxLayout;          //窗體頂級布局,布局本身也是一種窗口部件
    vboxLayout->addLayout(formLayout);                  //頂層窗體加入表單
    vboxLayout->addWidget(btnBox);                      //頂層窗體加入按鈕
    baseWidget->setLayout(vboxLayout);                  //加載到窗體上
}

void ExtensionDlg::initDetailInfo()
{
    detailWidget = new QWidget;
    QLabel* ageLabel = new QLabel(tr("Age"));
    QLineEdit* ageEdit = new QLineEdit;
    ageEdit->setText(tr("25"));
    QLabel* deptLabel = new QLabel(tr("Department"));
    QComboBox* deptComboBox = new QComboBox;

    deptComboBox->addItem(tr("department 1"));
    deptComboBox->addItem(tr("department 2"));
    deptComboBox->addItem(tr("department 3"));
    deptComboBox->addItem(tr("department 4"));

    QLabel* addressLabel = new QLabel(tr("Address"));
    QLineEdit* addressEdit = new QLineEdit;
    QFormLayout* formLayout = new QFormLayout;
    formLayout->addRow(ageLabel, ageEdit);
    formLayout->addRow(deptLabel, deptComboBox);
    formLayout->addRow(addressLabel, addressEdit);

    detailWidget->setLayout(formLayout);
    detailWidget->hide();                               //將擴展信息窗口隱藏,hide()是Qt默認槽函數之一
}

void ExtensionDlg::slot2Extension()
{
    if(detailWidget->isHidden())                        //ishidden()函數判斷擴展窗口顯隱狀態
        detailWidget->show();
    else
        detailWidget->hide();
}


ExtensionDlg.pro文件

 

 

TEMPLATE = app
TARGET =
DEPENDPATH +=
INCLUDEPATH +=
# Input
HEADERS += \
    ExtensionDlg.h

SOURCES += \
    ExtensionDlg.cpp \
    main.cpp


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM