您的位置:首頁 > 教程 > C語言教程 > 利用Qt實現可擴展對話框的示例代碼

利用Qt實現可擴展對話框的示例代碼

2022-06-18 17:52:24 來源:易采站長站 作者:

利用Qt實現可擴展對話框的示例代碼

目錄
一、項目介紹二、項目基本配置三、UI界面設計四、主程序實現4.1 dialog.h頭文件4.2 dialog.cpp源文件五、效果演示

可擴展對話框通常用于用戶對界面有不同要求的場合。通常情況下,只出現在基本對話窗體;當供高級用戶使用或需要更多信息時,可通過某種方式的切換顯示完整對話窗體(擴展窗體)。切換的工作通常由一個按鈕完成。hyW站長之家-易采站長站-Easck.Com

hyW站長之家-易采站長站-Easck.Com

一、項目介紹

實現一個簡單填寫資料的對話框。通常情況下,只需要填寫姓名和性別。若有特殊需要,還需要填寫更多信息時,則切換至完整對話窗體,完整對話窗體包括年齡、部門、聯系方式等。此時詳細按鈕切換為簡略按鈕,在此點擊縮回簡單對話窗體。hyW站長之家-易采站長站-Easck.Com

hyW站長之家-易采站長站-Easck.Com

二、項目基本配置

新建一個Qt案例,項目名稱為“Extension”,基類選擇“QDialog”,取消創建UI界面復選框的選中狀態,完成項目創建。hyW站長之家-易采站長站-Easck.Com

hyW站長之家-易采站長站-Easck.Com

三、UI界面設計

無UI界面hyW站長之家-易采站長站-Easck.Com

hyW站長之家-易采站長站-Easck.Com

四、主程序實現

hyW站長之家-易采站長站-Easck.Com

4.1>

聲明一個按鈕點擊槽函數:hyW站長之家-易采站長站-Easck.Com

private slots:
    void showDetailInfo();

聲明兩個函數實現窗體部分的創建,聲明兩個窗體和一個按鈕:hyW站長之家-易采站長站-Easck.Com

private:
    void createBaseInfo();  //實現基本對話窗體部分
    void createDetailInfo();//實現擴展窗體部分
    QWidget *baseWidget;    //基本窗體部分
    QWidget *detailWidget;  //擴展窗體部分

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

hyW站長之家-易采站長站-Easck.Com

4.2>

主函數定義如下:hyW站長之家-易采站長站-Easck.Com

    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的構建:hyW站長之家-易采站長站-Easck.Com

//完成基本窗體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的構建:hyW站長之家-易采站長站-Easck.Com

//實現擴展窗體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();//隱藏詳細窗體
}

最后實現窗體和按鈕文本的切換功能:hyW站長之家-易采站長站-Easck.Com

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

hyW站長之家-易采站長站-Easck.Com

五、效果演示

hyW站長之家-易采站長站-Easck.Com

到此這篇關于利用Qt實現可擴展對話框的示例代碼的文章就介紹到這了,更多相關Qt可擴展對話框內容請搜索易采站長站以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持易采站長站!hyW站長之家-易采站長站-Easck.Com

如有侵權,請聯系QQ:279390809 電話:15144810328

相關文章

  • VS2019項目打包生成.exe文件與Setup的步驟實現

    VS2019項目打包生成.exe文件與Setup的步驟實現

    對于Visual Studio Installer ,我們通常稱為:setup項目,是一個用于自定義安裝部署的項目方案。但是在VS2019中不見了,微軟是有意廢除安裝項目的,合作了一個第三方的安裝項目單獨使用。
    2020-03-13
  • 基于c++ ege圖形庫實現五子棋游戲

    基于c++ ege圖形庫實現五子棋游戲

    本文分享的五子棋實例,制作基于ege圖像庫, 首先需要安裝配置ege環境 就可以編寫小游戲了. 用到的ege庫函數不多 , 主要是基于c++的. 先看界面效果: 輸入界面:(就是控制臺) 游戲勝利界面
    2020-01-06
  • C++基于easyx圖形庫實現推箱子游戲

    C++基于easyx圖形庫實現推箱子游戲

    本文實例為大家分享了C++實現推箱子游戲的具體代碼,供大家參考,具體內容如下 頭文件: #includestdio.h#includestdlib.h//#includeWindows.h#includeconio.h#includegraphics.h#includestdbool.h //播放音樂需要
    2020-06-30
  • VS2019 Nuget找不到包的問題處理

    VS2019 Nuget找不到包的問題處理

    VS不記得改了什么設置之后,發現找不到EF 解決辦法 1、點擊右側的設置按鈕 2、彈出窗中左側樹形結構選擇“程序包源”,再點擊右上方的添加按鈕 輸入一下信息:https://www.nuget.org/a
    2020-03-27
  • visual studio2019的安裝以及使用圖文步驟詳解

    visual studio2019的安裝以及使用圖文步驟詳解

    一、下載安裝包 下載地址 選擇visual studio 2019的community版本 二、下載好后運行 三、組件的選擇 如果是用來學CC++的話,選擇以下兩個就夠了 之后如果還需要其他一些功能的話,可以后
    2020-03-08
  • VScode編譯C++ 頭文件顯示not found的問題

    VScode編譯C++ 頭文件顯示not found的問題

    一直用codeblocks,想試試vscode,結果這個問題給我弄懵逼了。一開始以為是iostream這個頭文件not found,后來發現第一個頭文件都會這樣顯示,放到后面就不會了,然而,光這一個顯示not
    2020-03-20
  • C++多線程獲取返回值方法詳解

    C++多線程獲取返回值方法詳解

    在許多時候,我們會有這樣的需求——即我們想要得到線程返回的值。但是在C++11 多線程中我們注意到,std::thread對象會忽略頂層函數的返回值。 那問題來了,我們要怎么獲得線程的返
    2020-06-25
  • JVM系列之String.intern的性能解析

    JVM系列之String.intern的性能解析

    String對象有個特殊的StringTable字符串常量池,為了減少Heap中生成的字符串的數量,推薦盡量直接使用String Table中的字符串常量池中的元素。 那么String.intern的性能怎么樣呢?我們一起來
    2020-06-23
色七七影院_香港三级台湾三级在线播放_男人放进女人阳道猛进猛出