利用Qt實(shí)現(xiàn)可擴(kuò)展對(duì)話框的示例代碼
可擴(kuò)展對(duì)話框通常用于用戶對(duì)界面有不同要求的場合。通常情況下,只出現(xiàn)在基本對(duì)話窗體;當(dāng)供高級(jí)用戶使用或需要更多信息時(shí),可通過某種方式的切換顯示完整對(duì)話窗體(擴(kuò)展窗體)。切換的工作通常由一個(gè)按鈕完成。
一、項(xiàng)目介紹
實(shí)現(xiàn)一個(gè)簡單填寫資料的對(duì)話框。通常情況下,只需要填寫姓名和性別。若有特殊需要,還需要填寫更多信息時(shí),則切換至完整對(duì)話窗體,完整對(duì)話窗體包括年齡、部門、聯(lián)系方式等。此時(shí)詳細(xì)按鈕切換為簡略按鈕,在此點(diǎn)擊縮回簡單對(duì)話窗體。
二、項(xiàng)目基本配置
新建一個(gè)Qt案例,項(xiàng)目名稱為“Extension”,基類選擇“QDialog”,取消創(chuàng)建UI界面復(fù)選框的選中狀態(tài),完成項(xiàng)目創(chuàng)建。
三、UI界面設(shè)計(jì)
無UI界面
四、主程序?qū)崿F(xiàn)
4.1 dialog.h頭文件
聲明一個(gè)按鈕點(diǎn)擊槽函數(shù):
private slots: void showDetailInfo();
聲明兩個(gè)函數(shù)實(shí)現(xiàn)窗體部分的創(chuàng)建,聲明兩個(gè)窗體和一個(gè)按鈕:
private: void createBaseInfo(); //實(shí)現(xiàn)基本對(duì)話窗體部分 void createDetailInfo();//實(shí)現(xiàn)擴(kuò)展窗體部分 QWidget *baseWidget; //基本窗體部分 QWidget *detailWidget; //擴(kuò)展窗體部分 QPushButton *DetailBtn; //詳細(xì)-簡略按鈕
4.2 dialog.cpp源文件
主函數(shù)定義如下:
setWindowTitle("Extension Dialog"); //窗體標(biāo)題 createBaseInfo(); createDetailInfo(); QVBoxLayout *layout=new QVBoxLayout(this);//布局 layout->addWidget(baseWidget); layout->addWidget(detailWidget); layout->setSizeConstraint(QLayout::SetFixedSize);//設(shè)置窗體的大小固定,不能利用拖拽改變大小 layout->setSpacing(10); //設(shè)置間距為10
定義createBaseInfo()函數(shù),完成基本窗體baseWidget的構(gòu)建:
//完成基本窗體baseWidget的構(gòu)建 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("詳細(xì)"); 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()));//點(diǎn)擊詳細(xì)按鈕觸發(fā)showDetailInfo()槽函數(shù) }
定義createDetailInfo()函數(shù),完成擴(kuò)展窗體detailWidget的構(gòu)建:
//實(shí)現(xiàn)擴(kuò)展窗體detailWidget的構(gòu)建 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();//隱藏詳細(xì)窗體 }
最后實(shí)現(xiàn)窗體和按鈕文本的切換功能:
//實(shí)現(xiàn)窗體的擴(kuò)展切換功能 void Dialog::showDetailInfo(){ if(detailWidget->isHidden()){ detailWidget->show(); DetailBtn->setText("簡略"); } else { detailWidget->hide(); DetailBtn->setText("詳細(xì)"); } }
五、效果演示
到此這篇關(guān)于利用Qt實(shí)現(xiàn)可擴(kuò)展對(duì)話框的示例代碼的文章就介紹到這了,更多相關(guān)Qt可擴(kuò)展對(duì)話框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中string類的常用方法實(shí)例總結(jié)
string類是C++提供的抽象數(shù)據(jù)類型,其支持可變長字符串,下面這篇文章主要給大家總結(jié)介紹了關(guān)于C++中string類的常用方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用
這篇文章主要介紹了C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)
下面小編就為大家?guī)硪黄狢++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06關(guān)于C++的重載運(yùn)算符和重載函數(shù)
一般來說,重載運(yùn)算符在實(shí)際的項(xiàng)目開發(fā)中會(huì)經(jīng)常的用到,但如果某些自定義類型通過簡短幾行代碼重載一些常用的運(yùn)算符(如:+-*/),就能讓編程工作帶來方便,需要的朋友可以參考下本文2023-05-05