QT:复杂结构体不同窗口间传递(父传子,子传父)


(父传子)


在写程序时,难免会碰到多窗体之间进行传值的问题,今天主要谈一下复杂结构体传值的问题(网上有很多博客,看的头疼,本篇进行详细解读)。
具体原理不会讲,直接上流程:
1.首先新建你的主窗口(我建了一个按钮,lineEdit和Qlabel)。

2. 建立你的子窗口,在一个工程下(目的是将子窗口的字符串和数字分别传递如主窗口的lineEdit和Qlabel)


3. 在主窗口的.h文件中包含子窗口的头文件。

4.定义主窗口“弹出按钮”的槽函数,链接子窗口
《1》查看子窗口的类名:

《2》在主窗口新建指向子窗口的指针,并在主窗口的构造函数中初始化


《3》定义主窗口按钮的槽函数链接子窗口,并实现代码。



此时,已经完成了弹出功能

4. 在子窗口的.h头文件中定义一个结构体(Q_DECLARE_METATYPE用于注册(必须有)

5. 在子窗口定义一个信号和槽函数(信号用于发射信息,槽函数用于响应子窗口的按钮,
并包含对应头文件#include )


6. 定义子窗口的链接,和槽函数

实现槽函数

7. 在主窗口中定义一个接受子窗口发出信号的槽函数,并进行链接,实现。


实现

8.大功告成了

接下来贴上源码:

//main_dialog.h
#pragma once#include <QtWidgets/QDialog>
#include "ui_main_dialog.h"
#include "son_dialog.h"class main_dialog : public QDialog
{Q_OBJECTpublic:main_dialog(QWidget *parent = Q_NULLPTR);
public slots:void open_son_dia();void dispaly(QVariant result);
private:Ui::main_dialogClass ui;son_Dialog *son_dia;
};
//main_dialog.cpp
#include "main_dialog.h"main_dialog::main_dialog(QWidget *parent): QDialog(parent)
{ui.setupUi(this);son_dia = new son_Dialog;connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(open_son_dia()));connect(son_dia, SIGNAL(send_data(QVariant)), this, SLOT(dispaly(QVariant)));
}
void main_dialog::open_son_dia(){son_dia->show();//弹出窗口son_dia->setModal(true);//让子窗口处于模态(可有可无)
}
void main_dialog::dispaly(QVariant result){store_data final_data;final_data = result.value<store_data>();ui.lineEdit->setText(final_data.str);ui.label->setNum(final_data.num);
}
//main.cpp
#include "main_dialog.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);main_dialog w;w.show();return a.exec();
}
//son_dialog.h
#ifndef SON_DIALOG_H
#define SON_DIALOG_H#include <QDialog>
#include <QVariant>
struct store_data
{int num;//存储数字QString str;//存储字符
};
Q_DECLARE_METATYPE(store_data);namespace Ui {
class son_Dialog;
}class son_Dialog : public QDialog
{Q_OBJECT
signals:void send_data(QVariant);
public slots:void push_slots();public:explicit son_Dialog(QWidget *parent = 0);~son_Dialog();private:Ui::son_Dialog *ui;};#endif // SON_DIALOG_H
//son_dialog.cpp
#include "son_dialog.h"
#include "ui_son_dialog.h"son_Dialog::son_Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::son_Dialog)
{ui->setupUi(this);connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(push_slots()));
}son_Dialog::~son_Dialog()
{delete ui;
}
void son_Dialog::push_slots(){store_data data;//结构体实例化QVariant variance;//将结构体打包入QVariant再进行传递data.num = (ui->lineEdit_2->text()).toInt();//获取的为字符串,转化为intdata.str = ui->lineEdit->text();variance.setValue(data);emit send_data(variance);//发出信号
}

文章主要对复杂结构体的传递进行了详述,熟练后就可以自由发挥了,嘿嘿,这种结构体传递的方式在软件中很常见,如下:

运行结果(调整过点号)


(子传父)


雷同于父传子,也是定义信号和槽函数,有区别的是:父传子是在父窗口中,父窗口定义信号,定义链接函数,子窗口定义槽函数和实现函数。
(1)父窗口的信号函数

(2)在父窗口中定义子窗口的指针(子窗口没法定义父窗口指针),并初始化


(3)链接函数,四个对象分别为1,父窗口指针(this) 2,父窗口信号(父窗口定义) 3.子窗口指针(父窗口定义) 4.子窗口槽函数(在子窗口定义)

(4)父窗口发送信号(下图表示:在打开影像线性增强界面的同时发送一个父窗口传递到子窗口的整型值)

(5)子窗口定义一个接收父窗口整型value的槽函数,并实现它(下图是根据影像的信息传递一个滑块的初值)。


(6)结果展示:

子窗口表示初始影像的最大灰度值为255,

将影像整体灰度值线性压缩至0-滑块位置的灰度

QT:复杂结构体不同窗口间传递相关推荐

  1. C#窗口间传递消息(聊天记录)

    C#窗口间传递消息 链接:http://blog.csdn.net/chenyuling/archive/2007/05/25/1625907.aspx 链接:http://www.cnblogs.c ...

  2. C语言中结构体参数变量的传递

    c语言  结构体  函数  参数  传递 一.前言 本文中的程序实现对员工信息结构体字段赋值并打印出来的功能.该结构体的定义如下: // 员工信息结构体 typedef struct {INT8 sz ...

  3. JNI调用c++函数,该函数的参数是结构体(——对象的传递)

    第三方C++函数接口为 int api_get_logfile(Struct fileinfo tfile),参数是个结构体,且套了另一个结构体: struct fileinfo{  char *fu ...

  4. c语言如何传递结构体指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  5. c语言 机构体传给指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  6. 在QT中结构体快速从二进制文件中读取数据

    这可能是一个比较基础的问题,但由于刚开始学习c++,但是对我来说,结构体快速从二进制文件读取数据,给我解决了很大的问题,这里我把方法写出来,和有需要的人分享一下,高手看到了请多包涵. 我的二进制文件是 ...

  7. 结构体作为参数的传递和返回

    结构是多个变量的集合,可以作为函数的参数或者返回值, 按值传递是参数传递的一种方式,就是把实参赋给形参,相当于复制了实参,形参的修改不会影响实参的变化, <span style="fo ...

  8. 【Qt】信号和槽传递自定义结构体

    一.使用信号和槽传递自定义结构体 这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下. 一共有三种方法,可以让结构体在信号和槽之间传递.前两种方法可以让结构体在线程之间传递,最后一种方法只 ...

  9. c语言不同类型指针间的强转,C语言中不同的结构体类型的指针间的强制转换详解...

    C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在 ...

最新文章

  1. [C++]C++中的IO类
  2. 原创|一文读懂主成分分析(PCA)
  3. 正則表達式基本元字符集及其含义(上)
  4. python中是干嘛的-学 Python 都用来干嘛的?
  5. 今天,在苏州落户了.
  6. 一支笔卖70万,为的是能打开笔,复杂的像辆车,英国女王都用它
  7. 一句话总结.Net下struct和class内存分配方面的区别
  8. Seesion工作原理
  9. NewSQL登堂入室 数据库厂商掘金行业大数据
  10. 海思平台Hi3796MV200芯片处理器介绍
  11. Java的图标和由来
  12. windows自带桌面远程控制
  13. 广播电台常用51首背景音乐~甘醇永久
  14. android 点击提示音,Android 下实现------蜂鸣提示音和震动
  15. 三体和银河帝国基地孰优孰劣?
  16. 一文读懂网络效应对Web3的重要意义
  17. 百度网盘青春版:我就糊弄一下
  18. 深入浅出WPF(8)——数据的绿色通道,Binding(中)
  19. 利用多时间无人机数据和时空深度学习模型的作物产量预测
  20. 有后效性和无后效性的通俗理解

热门文章

  1. opencv--GrabCut
  2. 大数据剖析热点新闻:996、巴黎圣母院、奔驰维权为什么成为本周热搜
  3. SpringMVC-自定义类型转换器
  4. 微软 Azure人工智能认知服务打造语音提醒喝水助手(带源码和演示地址)
  5. CSDN--在有序和无序段落中如何换行
  6. 自定义圆环形进度条实现
  7. 数字图像处理在前端页面中实现
  8. Typora常用快捷键(MarkDown)
  9. 【案例23】NCC2005 was集群报非法登录的解决方案
  10. c++中按位取反运算