0


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

}
标签: qt ui 开发语言

本文转载自: https://blog.csdn.net/qq_58136559/article/details/129899366
版权归原作者 小白打怪记 所有, 如有侵权,请联系我们删除。

“QT如何实现不同窗口之间的通信”的评论:

还没有评论