简单明了,看效果+看代码

主窗口向子窗口进行传值和传结构体数据


子窗口向主窗口进行传值和传结构体数据


子窗口界面

主窗口界面

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QVariant>namespace Ui {class Dialog;
}
//结构体
struct m_data
{int num;QString name;
};
Q_DECLARE_METATYPE(m_data)//注册后的类型可以作为QVariant的自定义类型。这个宏应该放在类或者结构体外面的下面。class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = nullptr);~Dialog();
signals:void sendResetStr(QString);//子窗口向主窗口传值void send_resetData(QVariant);//子窗口向主窗口传结构体数据private slots:void on_pushButton_clicked();//传值操作按钮void recvStr(QString);//接收主窗口传的值void recv_data(QVariant result);//接收主窗口传的结构体数据private:Ui::Dialog *ui;
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QVariant>Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);
}Dialog::~Dialog()
{delete ui;
}/* 传值操作按钮 */
void Dialog::on_pushButton_clicked()
{//传值QString resetStr = ui->value_lineEdit->text();emit sendResetStr(resetStr);//传结构体m_data data;QVariant variant;data.num = ui->num_lineEdit->text().toInt();data.name = ui->name_lineEdit->text();variant.setValue(data);emit send_resetData(variant);
}/* 普通值 */
void Dialog::recvStr(QString value)
{ui->value_lineEdit->setText(value);
}/* 结构体 */
void Dialog::recv_data(QVariant result)
{m_data data;data = result.value<m_data>();ui->num_lineEdit->setText(QString::number(data.num));ui->name_lineEdit->setText(data.name);
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "dialog.h"class Dialog;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();signals:void sendStr(QString);//向子窗口传值void send_data(QVariant);//向子窗口传结构体private slots:void on_pushButton_clicked();//传值操作按钮void recvResetStr(QString);//接收子窗口回传的值void recv_resetData(QVariant result);//接收子窗口回传的结构体private:Ui::MainWindow *ui;Dialog *dlg;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);dlg = new Dialog();//主窗口向子窗口传值QObject::connect(this,SIGNAL(sendStr(QString)),dlg,SLOT(recvStr(QString)));//子窗口向主窗口传值QObject::connect(dlg,SIGNAL(sendResetStr(QString)),this,SLOT(recvResetStr(QString)));//主窗口向子窗口传结构体connect(this,SIGNAL(send_data(QVariant)),dlg,SLOT(recv_data(QVariant)));//子窗口向主窗口传结构体connect(dlg,SIGNAL(send_resetData(QVariant)),this,SLOT(recv_resetData(QVariant)));}MainWindow::~MainWindow()
{delete ui;
}/* 传值操作按钮 */
void MainWindow::on_pushButton_clicked()
{dlg->show();dlg->setModal(true);//主窗口向子窗口传值QString sendValue = ui->value_lineEdit->text();emit sendStr(sendValue);//主窗口向子窗口传结构体m_data data;QVariant variant;data.num = ui->num_lineEdit->text().toInt();data.name = ui->name_lineEdit->text();variant.setValue(data);emit send_data(variant);}/* 获取子窗口回传的值 */
void MainWindow::recvResetStr(QString result)
{ui->value_lineEdit->setText(result);
}/* 获取子窗口回传的结构体 */
void MainWindow::recv_resetData(QVariant result)
{m_data data;data = result.value<m_data>();ui->num_lineEdit->setText(QString::number(data.num));ui->name_lineEdit->setText(data.name);
}

main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

好了,到此就是窗口之间的传值和结构体数据的整个过程了。希望对你有帮助!!!

Qt窗口之间传值和结构体数据相关推荐

  1. QT 使用数据流方式QDataSteam读写结构体数据

    文章目录 一.QT中保存单个变量到文件中 二.使用memcpy读写结构体数据 一.QT中保存单个变量到文件中 在QT中使用QDateStream进行数据流文件读写,保存数据(QT帮助中的例子). Ex ...

  2. ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据

    前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...

  3. C语言经典例71-编写函数输出结构体数据

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 编写input()和output()函数输入,输出5个学生的数据记录. 2 分析 定义结构体,声明结构体数组,再编写函数传入结构体数组指针到 ...

  4. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )

    文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...

  5. 将结构体数据存储到一段字符串string中

    核心思想 指定一段内存空间存储结构体数据,然后使用一个指针强制类型转化为结构体类型的,就可以使用这个指针操作结构体相关的成员函数和变量 结构体内存只会为定义的变量进行分配内存空间,函数只进行调用,不占 ...

  6. linux进程内存结构体,Linux下网络编程(3)——进程间通信(IPC),共享内存,传递结构体数据...

    1. 前言 多进程,总有一些交互要做,不可能各自独立. 这里是最简单的例子.一个写入,一个读取. 一个建立共享内存,写入数据. 一个读取共享内存的内容. 2. 简单例子代码 twriter.cpp 代 ...

  7. Arduino EEPROM对结构体数据存储和读取

    Arduino EEPROM对结构体数据存储和读取 以Arduino UNO开发板为例. 注意:该示例不适用于在ESP8266上使用 EEPROM.put()或者 EEPROM.get()来对数据读写 ...

  8. QT QDebug如何一次性打印结构体的数据

    在QT环境,我们使用QDebug进行调试输出时,如果遇到需要整个结构体的内容,可以考虑在结构体中定义一个友元函数,重载QDebug的输出操作符<<,便可以使用QDebug输出结构体的数据. ...

  9. 关于结构体数据的读写

    最近在工作中遇到一种直接按照结构体读写数据的情况,之前没有遇到记录下来! 结构体: typedef struct CAMERAPOINT {float point_X;float point_Y;fl ...

最新文章

  1. 大数据时代的新型数据库 — 图数据库 Neo4j 的应用
  2. pyhton 反转单词顺序
  3. 网易自动化UI测试解决方案Airtest Project亮相GDC
  4. kangle支不支持PHP_【转载】PHP调用kangle的API
  5. office 2003和office 2013同时安装使用的问题
  6. Linux下VNCSERVER的使用介绍
  7. BZOJ 3401: [Usaco2009 Mar]Look Up 仰望( 单调栈 )
  8. Juniper防火墙新手教程8:Juniper防火墙配置的导入及导出
  9. 【转】linux常用命令
  10. 金蝶KIS专业版13.0视频教程
  11. 问卷调查系统的设计与实现
  12. stm32串口控制LED灯
  13. Tortoise ORM 简单使用
  14. 日本经济泡沫与房价泡沫
  15. html表格里面怎么合并单元格的快捷键,excel合并单元格快捷键是什么
  16. python定义一个dog类 类属性有名字毛色体重_全面了解python中的类,对象,方法,属性...
  17. Xilinx 7A 开发流程——工程模式 ARTY XC7A35T
  18. VMware14.0无os x选项问题解决
  19. Pytorch混合精度训练
  20. css3 性能优化之 will-change 属性

热门文章

  1. 著名的菲尔人格测试!听说挺准的
  2. 解决usage: mo_onnx.py [options] mo_onnx.py: error: unrecognized arguments: 113.985 119.85] 69.87 70.89
  3. 龙贝格求积分算法例题_数值分析实习作业之龙贝格求积
  4. goproxy.io for Go modules
  5. UE4 Sequence在蓝图中播放和结束
  6. js+HTML实现组织结构图
  7. node ncc 打包
  8. 考研结束,一起聊聊考研中的故事
  9. Android SDK Windows安装教程图解
  10. 需求分析-需求调研步骤和方法