首頁 > 軟體

利用Qt實現可延伸對話方塊的範例程式碼

2022-06-18 18:01:44

可延伸對話方塊通常用於使用者對介面有不同要求的場合。通常情況下,只出現在基本對話表單;當供高階使用者使用或需要更多資訊時,可通過某種方式的切換顯示完整對話表單(擴充套件表單)。切換的工作通常由一個按鈕完成。

一、專案介紹

實現一個簡單填寫資料的對話方塊。通常情況下,只需要填寫姓名和性別。若有特殊需要,還需要填寫更多資訊時,則切換至完整對話表單,完整對話表單包括年齡、部門、聯絡方式等。此時詳細按鈕切換為簡略按鈕,在此點選縮回簡單對話表單。

二、專案基本設定

新建一個Qt案例,專案名稱為“Extension”,基礎類別選擇“QDialog”,取消建立UI介面核取方塊的選中狀態,完成專案建立。

三、UI介面設計

無UI介面

四、主程式實現

4.1 dialog.h標頭檔案

宣告一個按鈕點選槽函數:

private slots:
    void showDetailInfo();

宣告兩個函數實現表單部分的建立,宣告兩個表單和一個按鈕:

private:
    void createBaseInfo();  //實現基本對話表單部分
    void createDetailInfo();//實現擴充套件表單部分
    QWidget *baseWidget;    //基本表單部分
    QWidget *detailWidget;  //擴充套件表單部分

    QPushButton *DetailBtn; //詳細-簡略按鈕

4.2 dialog.cpp原始檔

主函數定義如下:

    setWindowTitle("Extension Dialog");   //表單標題
    createBaseInfo();
    createDetailInfo();
    QVBoxLayout *layout=new QVBoxLayout(this);//佈局
    layout->addWidget(baseWidget);
    layout->addWidget(detailWidget);
    layout->setSizeConstraint(QLayout::SetFixedSize);//設定表單的大小固定,不能利用拖拽改變大小
    layout->setSpacing(10);   //設定間距為10

定義createBaseInfo()函數,完成基本表單baseWidget的構建:

//完成基本表單baseWidget的構建
void Dialog::createBaseInfo()
{
    baseWidget=new QWidget;
    QLabel *nameLabel=new QLabel("姓名:");
    QLineEdit *nameLineEdit=new QLineEdit;
    QLabel *sexLabel=new QLabel("性別:");
    QComboBox *sexComboBox=new QComboBox;
    sexComboBox->insertItem(0,"女");
    sexComboBox->insertItem(1,"男");
    QGridLayout *LeftLayout=new QGridLayout;
    LeftLayout->addWidget(nameLabel,0,0);
    LeftLayout->addWidget(nameLineEdit,0,1);
    LeftLayout->addWidget(sexLabel,1,0);
    LeftLayout->addWidget(sexComboBox,1,1);
    QPushButton *OKBtn=new QPushButton("確定");
    DetailBtn=new QPushButton("詳細");
    QDialogButtonBox *btnBox=new QDialogButtonBox(Qt::Vertical);
    btnBox->addButton(OKBtn,QDialogButtonBox::ActionRole);
    btnBox->addButton(DetailBtn,QDialogButtonBox::ActionRole);
    QHBoxLayout *mainLayout=new QHBoxLayout(baseWidget);
    mainLayout->addLayout(LeftLayout);
    mainLayout->addWidget(btnBox);
    connect(DetailBtn,SIGNAL(clicked()),this,SLOT(showDetailInfo()));//點選詳細按鈕觸發showDetailInfo()槽函數
}

定義createDetailInfo()函數,完成擴充套件表單detailWidget的構建:

//實現擴充套件表單detailWidget的構建
void Dialog::createDetailInfo()
{
    detailWidget=new QWidget;
    QLabel *ageLabel=new QLabel("年齡:");
    QLineEdit *ageLineEdit=new QLineEdit;
    ageLineEdit->setText("30");
    QLabel *departmentLabel=new QLabel("部門:");
    QComboBox *departmentComboBox=new QComboBox;
    departmentComboBox->addItem("部門1");
    departmentComboBox->addItem("部門2");
    departmentComboBox->addItem("部門3");
    QLabel *teleLabel=new QLabel("電話:");
    QLineEdit *teleLineEdit=new QLineEdit;
    QGridLayout *mainLayout=new QGridLayout(detailWidget);
    mainLayout->addWidget(ageLabel,0,0);
    mainLayout->addWidget(ageLineEdit,0,1);
    mainLayout->addWidget(departmentLabel,1,0);
    mainLayout->addWidget(departmentComboBox,1,1);
    mainLayout->addWidget(teleLabel,2,0);
    mainLayout->addWidget(teleLineEdit,2,1);
    detailWidget->hide();//隱藏詳細表單
}

最後實現表單和按鈕文字的切換功能:

//實現表單的擴充套件切換功能
void Dialog::showDetailInfo(){
    if(detailWidget->isHidden()){
        detailWidget->show();
        DetailBtn->setText("簡略");
    }
    else
    {
        detailWidget->hide();
        DetailBtn->setText("詳細");
    }
}

五、效果演示

到此這篇關於利用Qt實現可延伸對話方塊的範例程式碼的文章就介紹到這了,更多相關Qt可延伸對話方塊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com