国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ Qt開發(fā):自定義Dialog對(duì)話框組件

這篇具有很好參考價(jià)值的文章主要介紹了C++ Qt開發(fā):自定義Dialog對(duì)話框組件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹自定義Dialog組件的常用方法及靈活運(yùn)用。

在之前的文章中筆者已經(jīng)為大家展示了默認(rèn)Dialog組件的使用方法,雖然內(nèi)置組件支持對(duì)數(shù)據(jù)的輸入,但有時(shí)候我們需要一次性輸入多個(gè)數(shù)據(jù),此時(shí)如果之使用默認(rèn)模態(tài)對(duì)話框似乎不太夠用,此時(shí)我們需要自己創(chuàng)建一個(gè)自定義對(duì)話框,需要說(shuō)明的是此類對(duì)話框也是一種窗體,所以可以在其上面放置任何通用組件,以實(shí)現(xiàn)更多復(fù)雜的開發(fā)需求。

自定義對(duì)話框需要解決的問(wèn)題是,如何讓父窗體與子窗體進(jìn)行數(shù)據(jù)交換,要實(shí)現(xiàn)數(shù)據(jù)的交換有兩種方式,第一種方式是通過(guò)動(dòng)態(tài)加載模態(tài)對(duì)話框,當(dāng)用戶點(diǎn)擊確定后通過(guò)GetValue()來(lái)拿到數(shù)據(jù),而第二種方式則是通過(guò)發(fā)送信號(hào)的方式將數(shù)據(jù)投遞給父窗體,這兩種方式都可以,讀者可根據(jù)自身需求來(lái)選擇不同的通信方式。

1.1 使用模態(tài)對(duì)話框傳值

首先我們需要?jiǎng)?chuàng)建一個(gè)自定義對(duì)話框,在Qt中創(chuàng)建對(duì)話框很容易,具體創(chuàng)建流程如下所示:

  • 選擇項(xiàng)目 -> AddNew -> QT -> Qt設(shè)計(jì)師界面類 -> 選擇DialogWithoutButtons -> 命名為Dialog保存

C++ Qt開發(fā):自定義Dialog對(duì)話框組件

此時(shí)直接點(diǎn)擊下一步按鈕,并選中Forms/dialog.ui界面編輯菜單,在編輯欄中我們分別增加一個(gè)LineEdit編輯框,以及兩個(gè)PushButton按鈕組件,將第一個(gè)組件命名為BtnOk將第二個(gè)組件命名為BtnCancel,界面如下所示;

C++ Qt開發(fā):自定義Dialog對(duì)話框組件

當(dāng)做完頁(yè)面布局后,其次我們還需要在Dialog.ui組件上增加兩個(gè)信號(hào),分別是點(diǎn)擊關(guān)閉,并將信號(hào)關(guān)聯(lián)到兩個(gè)槽函數(shù)上,其信號(hào)應(yīng)該寫成如下圖所示。

C++ Qt開發(fā):自定義Dialog對(duì)話框組件

如上圖,accept()QDialog 類的一個(gè)公共槽函數(shù)。調(diào)用這個(gè)槽函數(shù)會(huì)觸發(fā)對(duì)話框的接受(accept)操作,通常用于模擬用戶點(diǎn)擊對(duì)話框的“確定”按鈕。同樣的reject() 也是 QDialog 類的一個(gè)公共槽函數(shù)。調(diào)用這個(gè)槽函數(shù)會(huì)觸發(fā)對(duì)話框的拒絕(reject)操作,通常用于模擬用戶點(diǎn)擊對(duì)話框的“取消”按鈕。

接著我們點(diǎn)開模態(tài)對(duì)話框的dialog.cpp對(duì)話框類,其類內(nèi)需要定義兩個(gè)成員函數(shù),它們的功能如下:

  • 第一個(gè) GetValue() 用來(lái)獲取當(dāng)前編輯框內(nèi)的數(shù)據(jù)并將數(shù)據(jù)返回給父窗體。
  • 第二個(gè) SetValue() 用來(lái)接收傳入的參數(shù),并將此參數(shù)設(shè)置到自身窗體中的編輯框內(nèi)。
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

// 用于MainWindow獲取編輯框中的數(shù)據(jù)
QString Dialog::GetValue()
{
    return ui->lineEdit->text();
}

// 用于設(shè)置當(dāng)前編輯框中的數(shù)據(jù)為MainWindow
void Dialog::SetValue(QString x)
{
    ui->lineEdit->setText(x);
}

Dialog::~Dialog()
{
    delete ui;
}

接著我們來(lái)看一下MainWindow函數(shù)中是如何接收參數(shù)的,對(duì)于主窗體來(lái)說(shuō),當(dāng)用戶點(diǎn)擊on_pushButton_clicked()按鈕時(shí),我們需要?jiǎng)討B(tài)將自己創(chuàng)建的Dialog加載,讀取出主窗體編輯框內(nèi)的值并設(shè)置到子窗體內(nèi),當(dāng)用戶按下QDialog::Accepted時(shí)則是獲取子窗體內(nèi)的值,此時(shí)通過(guò)調(diào)用ptr->GetValue()子窗體的成員函數(shù)來(lái)返回一個(gè)字符串,并將其設(shè)置到父窗體的編輯框內(nèi),主函數(shù)代碼如下所示;

// 首先要包含Dialog對(duì)話框類
#include "dialog.h"

#include <iostream>
#include <QDialog>

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setEnabled(false);
    ui->lineEdit->setText("hello lyshark");
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 按鈕點(diǎn)擊后執(zhí)行
void MainWindow::on_pushButton_clicked()
{
    // 創(chuàng)建模態(tài)對(duì)話框
    Dialog *ptr = new Dialog(this);                                 // 創(chuàng)建一個(gè)對(duì)話框
    Qt::WindowFlags flags = ptr->windowFlags();                     // 需要獲取返回值
    ptr->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);  // 設(shè)置對(duì)話框固定大小

    // 讀取MainWindows參數(shù)并設(shè)置到Dialog
    QString item = ui->lineEdit->text();
    ptr->SetValue(item);

    int ref = ptr->exec();             // 以模態(tài)方式顯示對(duì)話框
    if (ref==QDialog::Accepted)        // OK鍵被按下,對(duì)話框關(guān)閉
    {
        // 當(dāng)BtnOk被按下時(shí),則設(shè)置對(duì)話框中的數(shù)據(jù)
        QString the_value = ptr->GetValue();
        std::cout << "value = " << the_value.toStdString().data() << std::endl;
        ui->lineEdit->setText(the_value);
    }

    // 刪除釋放對(duì)話框句柄
    delete ptr;
}

至此就實(shí)現(xiàn)了參數(shù)的子窗體傳遞到父窗體,如下圖所示;

C++ Qt開發(fā):自定義Dialog對(duì)話框組件

2.1 使用信號(hào)傳值

對(duì)于信號(hào)傳值,我們需要在dialog.h頭文件中增加sendText()信號(hào),以及on_pushButton_clicked()槽函數(shù)的聲明部分,如下所示;

// 定義信號(hào)(信號(hào)只需聲明無(wú)需實(shí)現(xiàn))
signals:
    void sendText(QString str);
private slots:
    void on_pushButton_clicked();

而在dialog.cpp實(shí)現(xiàn)部分,我們首先需要將子窗體中的按鈕組件綁定到onBtnClick()槽函數(shù)上面,當(dāng)需要發(fā)送數(shù)據(jù)時(shí)直接通過(guò)調(diào)用emit sendText觸發(fā)信號(hào),并攜帶子窗體中send_data的數(shù)據(jù);

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);

    // 連接pushButton到onBtnClick上
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(onBtnClick()));
}

Dialog::~Dialog()
{
    delete ui;
}

// 發(fā)送信號(hào)到MainWindow
void Dialog::on_pushButton_clicked()
{
    QString send_data = ui->lineEdit->text();
    emit sendText(send_data);
}

接著是在mainwindow.h頭文件定義中,新增槽函數(shù)receiveMsg()函數(shù)用來(lái)接收信號(hào)的傳值。

private slots:
    // 定義槽函數(shù)
    void receiveMsg(QString str);
    void on_pushButton_clicked();

mainwindow.cpp實(shí)現(xiàn)部分,接收到信號(hào)后的槽函數(shù)receiveMsg其內(nèi)部可以直接將參數(shù)設(shè)置到父類窗口的lineEdit組件上,而當(dāng)on_pushButton_clicked按鈕被點(diǎn)擊是,我們只需要加載自己的子窗體,并Connect鏈接槽函數(shù)receiveMsg上面,當(dāng)做完這一切之后,再通過(guò)subwindow->show()讓子窗體顯示出來(lái)。

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "dialog.h"
#include <QDialog>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setEnabled(false);
}

// 接收信號(hào)并設(shè)置到LineEdit上
void MainWindow::receiveMsg(QString str)
{
    ui->lineEdit->setText(str);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    Dialog *subwindow = new Dialog(this);
    // 當(dāng)收到sendText信號(hào)時(shí)使用receiveMsg槽函數(shù)處理
    connect(subwindow, SIGNAL(sendText(QString)), this, SLOT(receiveMsg(QString)));
    subwindow->show();
}

當(dāng)然,此類對(duì)話框是非模態(tài)的,讀者可以拖動(dòng)父對(duì)話框,而由于是信號(hào)控制,所以當(dāng)發(fā)送參數(shù)到父窗體后,子窗體并不會(huì)立即關(guān)閉,如下圖所示;

C++ Qt開發(fā):自定義Dialog對(duì)話框組件

完整案例下載文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-760173.html

到了這里,關(guān)于C++ Qt開發(fā):自定義Dialog對(duì)話框組件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框

    06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框

    在一個(gè)完整的應(yīng)用程序設(shè)計(jì)中,不可避免地會(huì)涉及多個(gè)窗體、對(duì)話框的設(shè)計(jì)和調(diào)用,如何設(shè)計(jì)和調(diào)用這些對(duì)話框和窗體是搞清楚一個(gè)龐大的應(yīng)用程序設(shè)計(jì)的基礎(chǔ)。本章將介紹對(duì)話框和多窗體設(shè)計(jì)、調(diào)用方式、數(shù)據(jù)傳遞等問(wèn)題,主要包括以下幾點(diǎn)。 Qt 提供的標(biāo)準(zhǔn)對(duì)話框的使用,

    2024年02月13日
    瀏覽(103)
  • Android開發(fā) Dialog對(duì)話框 DatePickerDialog

    Android開發(fā) Dialog對(duì)話框 DatePickerDialog

    1. AlertDialog AlertDialog是彈出的提醒對(duì)話框,有提示,確認(rèn),選擇等功能。 沒(méi)有公開的構(gòu)造方法,一般用AlertDialog.Builder來(lái)完成參數(shù)設(shè)置,最后調(diào)用create方法創(chuàng)建。 參數(shù)設(shè)置常用的方法: ?代碼: 效果圖: ? 2. DatePickerDialog DatePickerDialog在 AlertDialog上添加了日期選擇器DatePicker,

    2023年04月09日
    瀏覽(23)
  • (css)自定義el-dialog對(duì)話框添加背景圖片
  • QT中在MainWindow(主窗口)中創(chuàng)建Dialog(對(duì)話框)兩種方式優(yōu)缺點(diǎn)對(duì)比

    QT中在MainWindow(主窗口)中創(chuàng)建Dialog(對(duì)話框)兩種方式優(yōu)缺點(diǎn)對(duì)比

    新建窗口工程 利用ui工具在Window中創(chuàng)建三個(gè)按鈕 打開對(duì)話框 關(guān)閉對(duì)話框 改變?nèi)齻€(gè)按鈕的名稱 openDialog closeDialog 在工程中添加QDialog類,名字是Dialog 在Dialog中創(chuàng)建label控件,寫上HelloWorld 最關(guān)鍵的一步,在window的類中創(chuàng)建Dialog私有對(duì)象指針 在window.cpp中編寫指針myDialog的初始化代

    2024年02月07日
    瀏覽(27)
  • Qt自定義對(duì)話框

    Qt自定義對(duì)話框

    自定義框主要通過(guò)對(duì)現(xiàn)有對(duì)話框QDialog類的派生,根據(jù)需求編寫成員函數(shù)、重載信號(hào)函數(shù)、槽函數(shù),進(jìn)而實(shí)現(xiàn)在主QWidget中點(diǎn)擊某個(gè)按鈕后,一個(gè)對(duì)話框的彈出 簡(jiǎn)化創(chuàng)建派生類 最后點(diǎn)擊完成即可。 自定義ui界面,編寫成員函數(shù)等 主窗口觸發(fā)槽函數(shù)編寫 這里常有一個(gè)固定的格式

    2024年02月13日
    瀏覽(94)
  • 解決問(wèn)題:Element ui組件中Dialog對(duì)話框只顯示遮罩層,不顯示彈框內(nèi)容

    解決問(wèn)題:Element ui組件中Dialog對(duì)話框只顯示遮罩層,不顯示彈框內(nèi)容

    以下是Dialog 對(duì)話框的基本用法: 這個(gè)時(shí)候頁(yè)面只顯示了遮罩層,但是不顯示彈框的內(nèi)容,查閱文檔后,發(fā)現(xiàn)有這樣一條: append-to-body的默認(rèn)值是false,所以需要自己在el-dialog標(biāo)簽中手動(dòng)設(shè)置為true, ?加上之后彈框內(nèi)容就可以顯示了。

    2024年02月06日
    瀏覽(99)
  • Python Qt6快速入門-自定義對(duì)話框和標(biāo)準(zhǔn)對(duì)話框

    對(duì)話框是有用的 GUI 組件,可以與用戶進(jìn)行交流(因此得名對(duì)話框)。 它們通常用于文件打開/保存、設(shè)置、首選項(xiàng)或不適合應(yīng)用程序主 UI 的功能。 它們是位于主應(yīng)用程序前面的小模態(tài)(或阻塞)窗口,直到它們被關(guān)閉。 Qt 為最常見的用例提供

    2024年02月03日
    瀏覽(29)
  • 【QT】自定義對(duì)話框及其調(diào)用

    【QT】自定義對(duì)話框及其調(diào)用

    目錄 1 對(duì)話框的不同調(diào)用方式 2 對(duì)話框QWDialogSize的創(chuàng)建和使用 3 對(duì)話框QWDialogHeaders的創(chuàng)建和使用 4 對(duì)話框QWDialogLocate的創(chuàng)建與使用 5 利用信號(hào)與槽實(shí)現(xiàn)交互操作 ?? ??? ??在一個(gè)應(yīng)用程序設(shè)計(jì)中,為了實(shí)現(xiàn)一些特定的功能,必須設(shè)計(jì)自定義對(duì)話框。自定義對(duì)話框 的設(shè)計(jì)一般

    2024年01月17日
    瀏覽(23)
  • vue-pc端elementui-統(tǒng)一修改問(wèn)題-Dialog 對(duì)話框點(diǎn)擊空白關(guān)閉問(wèn)題-element-所有組件層級(jí)問(wèn)題

    實(shí)際開發(fā)我們經(jīng)常發(fā)現(xiàn)dialog彈出框默認(rèn)點(diǎn)擊遮罩層空白地方就會(huì)關(guān)閉-有屬性可以關(guān)閉 但是經(jīng)常會(huì)圖方便-或者已經(jīng)寫完了,不想一個(gè)個(gè)寫,可以在main.js進(jìn)行統(tǒng)一關(guān)閉 當(dāng)我們?cè)陧?yè)面進(jìn)行復(fù)雜設(shè)計(jì)和層級(jí)關(guān)閉改變,會(huì)發(fā)現(xiàn)右上角的退出登錄彈出款在我們頁(yè)面之下 這是我們不管怎

    2024年02月13日
    瀏覽(92)
  • UG\NX二次開發(fā) 一種簡(jiǎn)單的選擇對(duì)話框 UF_UI_select_with_single_dialog

    UG\NX二次開發(fā) 一種簡(jiǎn)單的選擇對(duì)話框 UF_UI_select_with_single_dialog

    文章作者:里海 來(lái)源網(wǎng)站: https://blog.csdn.net/WangPaiFeiXingYuan ? ? ? ? UGNX二次開發(fā) 一種簡(jiǎn)單的選擇對(duì)話框 ? ? ??

    2024年02月13日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包