QT如何实现不同窗口之间的通信

这篇具有很好参考价值的文章主要介绍了QT如何实现不同窗口之间的通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法: 用qt的信号与槽来实现

 文章来源地址https://www.toymoban.com/news/detail-494640.html

1,首先,对发送信号的窗口,自定义信号,和槽函数。

 

如:From1

 

signals:

    void SendData(QString s);  //信号

 

private slots:

void SendSlot(); //传递信号的函数,这个函数的主要功能就是,发送SendData这个信号

 

 

//槽函数实现

void Form1::SendSlot()

{

    QString s = ui->lineEdit->text();

    emit SendData(s);

}

 

 

 

 

//Form1中传递按钮的信号与槽

 

 connect(ui->pushButton,&QPushButton::clicked,this,&Form1::SendSlot);

 

 

 

 

 

 

 

 

 

MainWindow主窗口

作为信号的接收方,不需要自定义信号,只需要定义接收信号的槽函数就可以了

 

步骤:

1,先包含要发送信号的窗口(Form1)的头文件

 

#include"form1.h"

 

定义其对象

Form1 * f1;

 

定义一个字符串来接收,form1发送的字符串

QString Str;

 

//定义接收的槽函数

void Recive(QString s);

 

 

 

//槽函数实现

void MainWindow::Recive(QString s)

{

    Str = s;

    ui->lineEdit->setText(Str);

}

 

 

 

 

 

//构造函数中实现。

f1 = new Form1;

 

//这种老式写法,用来传信号很合适。

connect(f1,SIGNAL(SendData(QString)),this,SLOT(Recive(QString)));

 

 

 

 

 

 

 

 

 

 

效果:

QT如何实现不同窗口之间的通信

 

 

 

 

 

 

 

 

 

 

完整代码:



#include <QWidget>

namespace Ui {

class Form1;

}



class Form1 : public QWidget

{

    Q_OBJECT



public:

    explicit Form1(QWidget *parent = nullptr);

    ~Form1();



signals:

    void SendData(QString s);



private slots:

    void SendSlot();





private:

    Ui::Form1 *ui;

};













#include <QMainWindow>

#include"form1.h"



QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE



class MainWindow : public QMainWindow

{

    Q_OBJECT



public:

    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();



    Form1 * f1;



    QString Str;



private slots:

    void on_pushButton_clicked();





    void Recive(QString s);



private:

    Ui::MainWindow *ui;

};

















#include "form1.h"

#include "ui_form1.h"



Form1::Form1(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Form1)

{

    ui->setupUi(this);



    connect(ui->pushButton,&QPushButton::clicked,this,&Form1::SendSlot);

}



Form1::~Form1()

{

    delete ui;

}



void Form1::SendSlot()

{

    QString s = ui->lineEdit->text();

    emit SendData(s);

}









#include "mainwindow.h"

#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    f1 = new Form1;



    connect(f1,SIGNAL(SendData(QString)),this,SLOT(Recive(QString)));



}



MainWindow::~MainWindow()

{

    delete ui;

}





void MainWindow::on_pushButton_clicked()

{

    f1->show();

}



void MainWindow::Recive(QString s)

{

    Str = s;

    ui->lineEdit->setText(Str);

}

 

 

到了这里,关于QT如何实现不同窗口之间的通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab实现多个窗口间的数据传递(不用GUIDE)

    在用多个matlab的figure进行数据交互时,数据传入是较为简单的,可以直接用function的形参实现,但如何把数据传回,是个比较麻烦的问题。 在GUIDE下,系统自动生成了output_fcn函数,可以用它来实现从子窗口到主窗口的数据传回,但如果是手写figure,就没有这个函数了。为此,

    2024年02月02日
    浏览(41)
  • 【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 Java 中多线程通信的语法和应用场景,并给出了样例代码。多线程通信是

    2024年02月11日
    浏览(45)
  • Qt/C++音视频开发50-不同ffmpeg版本之间的差异处理

    ffmpeg的版本众多,从2010年开始计算的项目的话,基本上还在使用的有ffmpeg2/3/4/5/6,最近几年版本彪的比较厉害,直接4/5/6,大版本之间接口有一些变化,特别是一些废弃接口被彻底删除了,而网络上的各种文章几乎都是ffmpeg3左右为主的,所以本人在写这个全功能播放组件的时

    2024年02月14日
    浏览(56)
  • 同源跨窗口通信:网易云音乐不同标签页打开同一页面,暂停原先标签页音频播放

    原文见:语雀 有个声音很好听的小帅哥问我说,如果当前浏览器打开一个标签页,页面播放着音乐,然后相同的链接又在另外一个页面打开,该如何将之前的页面音频停止播放。 有小帅哥问问题,我当然要回答啦(其实是我不得不答)🤣 我一想,这是跨窗口通信,用postM

    2023年04月08日
    浏览(46)
  • eNSP实验:三层交换机的基本配置,实现不同vlan间的访问

    一、实验设备 1、交换机:1台三层交换机、1台二层交换机 2、终    端:2台PC 二、实验拓扑 三、交换机的配置   1、LSW1的配置 2、LSW2的配置 3、PC1的配置 4、PC2的配置  四、不同Vlan间的访问 1、PC1访问PC2进行ping测试 2、PC2访问PC1行ping测试 总结:通过三层交换机可以实现不能

    2024年02月15日
    浏览(53)
  • 实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务

    数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用,对于个人用户也有很强的实用意义。也正因如此,大量数据共享软件被开发出来,云存储的概念也被重复炒作。对于爱好折腾的笔者来说,用最简单的工具找寻私人共享和存储解决方案,也是

    2024年02月10日
    浏览(42)
  • 使用消息中间件实现系统间的异步通信和解耦

    ​​​​​​​ 目录 引言 一. 选择合适的消息中间件 二. 定义消息格式和通信协议 1. 定义消息格式 消息头 消息体 2. 定义通信协议 发送消息 接收消息 消息处理 3. 示例代码 定义消息格式 发送消息 接收消息 三、发布-订阅模式 1. 定义发布-订阅模式 2. 示例代码 发布消息 订

    2024年02月19日
    浏览(53)
  • Python不同版本之间的切换方法

    这篇文章以3.11.0与3.10.10之间的版本切换为列讲述 首先我自己的电脑上同时安装了这两个版本的Python,并且都已经配置了环境变量 1.两个版本的Python 2.环境变量 调出CMD(win+r,输入cmd,回车),输入python,可以看到目前的版本为3.10.10 注意:这样在直接使用pip安装库的时候是安

    2024年02月03日
    浏览(55)
  • 三个案例详解不同网段之间如何互通

    当然还可以通过三层交换机划分VLAN配置更好。这里主要讲通过普通路由器之间互通 一台路由器连接另外一台路由器,这两台路由器分别连接不同的网段,那么如果要这两个网段互通,则必须配置路由,这个就是静态路由。 案例一、不同网段之间互通 例如: A路由wan口192.16

    2024年02月09日
    浏览(47)
  • 【window环境、Linux环境、QT三种方法实现TCP通信】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 大多数项目都在Linux系列的操作系统下开发服务器端,而多数客户端是在Windows平台下开发的。不仅如此,有时应用程序还需要在两个平台之间相互切换。因此,学习套接字编程的过程中,有必要兼顾Wi

    2024年04月25日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包