Qt窗体间值的传递方法

news/2024/10/18 18:13:53/

本文介绍Qt窗体间值的传递方法。

基于图形窗口的应用程序在执行过程中,有时候会涉及到窗口间传递数据,如常见的父窗口-子窗口间,子窗口-子窗口间,传递数据的方式有多种,常见的有通过全局变量,静态变量,消息,获取父窗口指针等方式,本文介绍常用的2种,通过消息和获取父窗口指针的方法。

1.获取父窗口指针

此方法仅适用与父窗口-子窗口间的值的传递。对于Qt而言,子窗口获取父窗口指针的方法:

QWidget *QWidget::parentWidget() const

操作步骤:

1)分别在父,子窗口定义需要传值的public函数,如:

父窗口内函数定义:

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();public:void setValue(int v);int getValue(void);private:Ui::MainWindow *ui;int a;private:void onPushButton(void);
};

子窗口内函数定义:

class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = nullptr);~Dialog();public:void setValue(int v);int getValue(void);private:Ui::Dialog *ui;int a;private:void onPushButton(void);
};

2)值传递

在父窗口实例化子窗口后,可以通过子窗口指针调用setValue()和getValue()函数获取子窗口值,子窗口内可以通过parentWidget()函数获取父窗口指针,进而调用父窗口的setValue()和getValue()函数,从而达到双向值的传递。

如子窗口内:

void Dialog::onPushButton()
{MainWindow *widget = nullptr;widget = static_cast<MainWindow *>(QWidget::parentWidget());widget->setValue(6);
}

2.消息传递

对于Qt,这里的消息传递就是指通过信号和槽的机制来实现值的传递。

操作步骤:

1)分别在父,子窗口定义信号和槽函数,如:

父窗口内函数定义:

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();public slots:void slotSetValue(int v);void slotGetValue(void);void slotValue(int v);signals:void sgnGetValue(void);void sgnSetValue(int v);void sgnValue(int v);private:Ui::MainWindow *ui;int a;private:void onPushButton(void);
};

子窗口内函数定义:

class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = nullptr);~Dialog();public slots:void slotSetValue(int v);void slotGetValue(void);void slotValue(int v);signals:void sgnGetValue(void);void sgnSetValue(int v);void sgnValue(int v);private:Ui::Dialog *ui;int a;private:void onPushButton(void);
};

2)建立连接

如父窗口内:

void MainWindow::onPushButton()
{Dialog *dialog = new Dialog(this);connect(dialog, &Dialog::sgnGetValue, this, &MainWindow::slotGetValue);connect(dialog, &Dialog::sgnSetValue, this, &MainWindow::slotSetValue);connect(dialog, &Dialog::sgnValue, this, &MainWindow::slotValue);connect(this, &MainWindow::sgnGetValue, dialog, &Dialog::slotGetValue);connect(this, &MainWindow::sgnSetValue, dialog, &Dialog::slotSetValue);connect(this, &MainWindow::sgnValue, dialog, &Dialog::slotValue);Q_EMIT sgnSetValue(3);dialog->exec();
}

这样,父,子窗口根据相应的信号和槽建立的联系,进而实现了值的传递。

总结,本文介绍了Qt窗体间值的传递的2种方法。


http://www.ppmy.cn/news/1165531.html

相关文章

Android之使用GirdLayoutManager时候给Item设置边距

效果&#xff1a; 一、自定义设置边距方法 SpaceItemDecoration.java package com.custom.jfrb.ui.jfrb.finishedProduct; //自己包名位置import android.graphics.Rect; import android.view.View;import androidx.annotation.NonNull; import androidx.recyclerview.widg…

javascript var let const 区别

javascript var let const 区别 在 JavaScript 中&#xff0c;有三种常用的变量声明方式&#xff1a;var、let和const。它们在作用域、可变性和重复声明等方面有一些区别。 var&#xff1a;使用var关键字声明的变量是函数作用域或全局作用域的变量。它的作用范围在包含它的函…

GEE打开NASA-USDA增强型SMAP全球土壤水分数据(10KM,2015-2020)

NASA-USDA增强型SMAP全球土壤水分数据&#xff08;10KM&#xff0c;2015-2020&#xff09; 一、GEE登录 首先需要注册一个Goole账号 在该网站中注册 二、创建GEE项目 按照上面操作&#xff0c;注册完后会创建一个自己的GEE项目。&#xff08;没有的话也可以从下面这个网站…

【操作系统】MBR主引导目录结构以及作用

一.BIOS和MBR的交接仪式 当BIOS检测完内存、显卡&#xff0c;把硬盘等外设加载进来后&#xff0c;便开始在内存0X00~0X3FF处建立起数据结构、中断向量表&#xff0c;并且填写中断例程。完成这一系列的操作后便开始寻找硬盘&#xff08;如果硬盘不止一个的话&#xff0c;则会通过…

Improving Image Generation with Better Captions

本文是LLM系列文章&#xff0c;针对《Improving Image Generation with Better Captions》的翻译。 使用更好的字幕提高图片生成 摘要1 引言2 数据集重加字幕3 评估重加字幕的数据集4 DALL-E 35 局限性和风险 摘要 我们表明&#xff0c;通过对高度描述性生成的图像字幕进行训…

RK3568 RTL8821cs适配 WPA3连接 与 WPA3热点配置

kernel&#xff1a;4-19 SOC&#xff1a;RK3568 system&#xff1a;Android12 模组&#xff1a;RTL8821CS 调试手段可以看之前的正基AP6256 一.驱动配置&#xff1a; 首先设备树配置如下: 因为 SDIO 电压是1.8V&#xff0c;必须加上sd-uhs-sdr104; &sdio_pwrseq{co…

C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包&#xff0c;初始代码&#xff0c;实现前缀和&#xff0c;实现前缀积&#xff0c;实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…

【C++】-还在玩普通的类吗,这里面有好几种特殊的类的设计,快进来看看

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …