方法: 用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)));
效果:
完整代码:
#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);
}
文章来源:https://www.toymoban.com/news/detail-494640.html
到了这里,关于QT如何实现不同窗口之间的通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!