国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C/C++ Qt 自定義Dialog對話框組件應用案例詳解

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

2022-03-06 18:09LyShark C/C++

有時候我們需要一次性修改多個數(shù)據(jù),使用默認的模態(tài)對話框似乎不太夠用,此時我們需要自己創(chuàng)建一個自定義對話框。這篇文章主要介紹了Qt自定義Dialog對話框組件的應用,感興趣的同學可以學習一下

在上一篇文章 《C/C++ Qt 標準Dialog對話框組件應用》 中我給大家演示了如何使用Qt中內置的標準對話框組件實現(xiàn)基本的數(shù)據(jù)輸入功能。

但有時候我們需要一次性修改多個數(shù)據(jù),使用默認的模態(tài)對話框似乎不太夠用,此時我們需要自己創(chuàng)建一個自定義對話框,這類對話框也是一種窗體,所以可以在其上面放置任何的通用組件,以實現(xiàn)更多復雜的開發(fā)需求。

目前自定義對話框與主窗體的通信有兩種方式,一種是通過函數(shù)實現(xiàn)通信,另一種則是通過信號實現(xiàn)通信,我們以通過函數(shù)通信為基礎,解釋一下如何實現(xiàn)跨窗體通信。

首先需要創(chuàng)建一個自定義對話框,對話框具體創(chuàng)建流程如下

選擇項目 -> AddNew -> QT -> Qt設計師界面類 -> 選擇空白Dialog -> 命名為Dialog保存

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

直接選中Dianlog.ui并繪制界面為以下,一個編輯框,兩個按鈕。

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

其次需要在Dialog對話框上增加兩個信號,分別是點擊和關閉,并將信號關聯(lián)到兩個槽函數(shù)上,其信號應該寫成如下樣子。

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

接著我們點開dialog.cpp這個類則是對話框類,類內需要定義兩個成員函數(shù),它們的功能如下:

  • 第一個 GetValue() 用來獲取當前編輯框內的數(shù)據(jù)并將數(shù)據(jù)返回給父窗體。
  • 第二個 SetValue() 用來接收傳入的參數(shù),并將此參數(shù)設置到自身窗體中的編輯框內。
#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ù)據(jù)為MainWindow
// https://www.cnblogs.com/lyshark
void Dialog::SetValue(QString x)
{
  ui->lineEdit->setText(x);
}

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

void Dialog::on_BtnOk_clicked()
{

}
void Dialog::on_BtnCancel_clicked()
{

}

對于主函數(shù)來說,當用戶點擊on_pushButton_clicked()按鈕時,我們需要動態(tài)將自己創(chuàng)建的Dialog加載,讀取出主窗體編輯框內的值并設置到子窗體內,當用戶按下QDialog::Accepted時則是獲取子窗體內的值,并將其設置到父窗體的編輯框內,主函數(shù)代碼如下所示.

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

#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;
}

// By: LyShark
// https://www.cnblogs.com/lyshark
// 按鈕點擊后執(zhí)行
void MainWindow::on_pushButton_clicked()
{
  // 創(chuàng)建模態(tài)對話框
  Dialog *ptr = new Dialog(this);                                 // 創(chuàng)建一個對話框
  Qt::WindowFlags flags = ptr->windowFlags();                     // 需要獲取返回值
  ptr->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);  // 設置對話框固定大小

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

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

  // 刪除釋放對話框句柄
  delete ptr;
}

具體演示代碼如下所示:

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

而對于信號版來說,我們需要在dialog.h頭文件中增加sendText()信號,以及on_pushButton_clicked()槽函數(shù)的聲明。

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
  Q_OBJECT

public:
  explicit Dialog(QWidget *parent = nullptr);
  ~Dialog();

// By: LyShark
// https://www.cnblogs.com/lyshark
private:
  Ui::Dialog *ui;


// 定義信號(信號只需聲明無需實現(xiàn))
signals:
  void sendText(QString str);

private slots:
  void on_pushButton_clicked();
};

#endif // DIALOG_H

dialog.cpp中則在構造函數(shù)中建立連接,并提供一個發(fā)送到MainWindow中的按鈕.

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

// By: LyShark
// https://www.cnblogs.com/lyshark
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
  ui->setupUi(this);
  connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(onBtnClick()));
}

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

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

主窗體頭文件mainwindow.h中定義receiveMsg接受數(shù)據(jù)的槽函數(shù).

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = nullptr);
  ~MainWindow();

// By: LyShark
// https://www.cnblogs.com/lyshark
private slots:
  // 定義槽函數(shù)
  void receiveMsg(QString str);
  void on_pushButton_clicked();

private:
  Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

并在mainwindow.cpp中實現(xiàn)這個槽函數(shù)。

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

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

// By: LyShark
// https://www.cnblogs.com/lyshark
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
  ui->setupUi(this);
  ui->lineEdit->setEnabled(false);
}

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

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

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

代碼運行后與基于函數(shù)版的基本一致,但在靈活性上來說信號版更好一些。

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

自定義對話框基本就這些內容,靈活運行這些組件,很容易就能實現(xiàn)一些有用的表格編輯器。

C/C++ Qt 自定義Dialog對話框組件應用案例詳解

到此這篇關于C/C++ Qt 自定義Dialog對話框組件應用案例詳解的文章就介紹到這了,更多相關C++ Qt Dialog對話框組件內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/LyShark/p/15603163.html

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現(xiàn)電腦關機程序

    C語言實現(xiàn)電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經(jīng)典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數(shù)據(jù)都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 天天天干天天天操 | 久久aⅴ国产欧美74aaa | 亚洲国产精品一区二区三区 | 国内精品视频在线观看 | 欧美成年网站 | 欧美日韩一区二区视频在线观看 | 久久久一区二区 | 国产成人网 | 午夜精品久久久久久久久久久久 | 久久久中文 | 久久免 | 黄色大片aaaa| 韩日av在线 | 日韩欧美视频 | 国产黄色av | 国产在线一区二区 | 在线观看中文字幕av | 日日操夜夜操天天操 | 国产精品爱久久久久久久 | 成人久久久精品国产乱码一区二区 | 欧美欧美欧美 | 国产精品美女久久久 | 成人在线一区二区三区 | 一区二区三区免费在线观看 | 国产成人在线一区二区 | 欧美一区二区三区男人的天堂 | 亚洲播放| 久久9999 | 黄色小视频在线观看 | 欧美一级大片免费 | 情一色一乱一欲一区二区 | 亚洲三级在线 | 一级做a爰片性色毛片2021 | 人人射人人舔 | 色天天综合久久久久综合片 | 天天操天天干天天插 | 国产在线精品一区二区 | t66y最新地址一地址二69 | 欧美日韩一区二区视频在线观看 | 国产午夜久久 | 国产白虎 |