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