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

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

 

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)));

 

 

 

 

 

 

 

 

 

 

效果:

678030838650430eb60d943a7897a8ff.png

 

 

 

 

 

 

 

 

 

 

完整代码:



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

}

 

 

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值