1、linux下安裝Qt4請參考如下博文:
2、Qt4工程的創建請參考如下博文:
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
