qt之不同界面之间信号的传递

不同界面之间通过信号槽传递信号

如图,绿色窗口是顶层窗口w3,蓝色窗口是w2,红色窗口是w1

顶层窗口向底层窗口传递信号

如果现在想把参数从w3传入w1该如何做呢?

很简单,用信号槽去传递参数,那么具体该如何写呢

w3中

 connect(b1,&QPushButton::clicked,[=](){
         emit sig_sendnum(10);
     });

w2中

 connect(w3,&MainWindow3::sig_sendnum,this,&MainWindow2::sig_sendnum);

w1中

 connect(w2,&MainWindow2::sig_sendnum,[=](int num){
         qDebug()<<num<<'\n';
     });

结果如图

底层窗口向顶层窗口传递信号

如果我想从底层窗口传递到顶层呢?

如果现在想把参数从w1传入w3该如何做呢?

w1中

 connect(ui->btn1,&QPushButton::clicked,[=](){
         emit w2->sig_numsend(20);
     });

w2中

 connect(this,&MainWindow2::sig_numsend,w3,&MainWindow3::sig_numsend);

w3中

 connect(this,&MainWindow3::sig_numsend,[=](int num){
         qDebug()<<num<<'\n';
     });

结果

其他信号槽的小知识

1.槽函数也可以填信号,用来快速传递参数

  connect(w3,&MainWindow3::sig_sendnum,this,&MainWindow2::sig_sendnum);

2.如果槽函数有重载,可以使用qt4的写法

 connect( 信号,SIGNAL(),槽,SLOT() );

3.可以自己接受自己发出的信号,底层向上层传递,就是靠这个特性

Qt 中,可以使用信号与槽机制来实现不同界面之间信号传递。具体来说,可以在一个界面中定义一个信号,然后在另一个界面中定义一个槽函数,并将两者连接起来。 以下是一个示例代码,其中包括两个界面 `MainWindow` 和 `SecondWindow`,它们之间通过信号与槽机制进行通信: ```c++ // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); signals: void mySignal(const QString &text); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H ``` ```c++ // mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->btnSendSignal, &QPushButton::clicked, [=]() { emit mySignal(ui->lineEdit->text()); }); } MainWindow::~MainWindow() { delete ui; } ``` ```c++ // secondwindow.h #ifndef SECONDWINDOW_H #define SECONDWINDOW_H #include <QDialog> namespace Ui { class SecondWindow; } class SecondWindow : public QDialog { Q_OBJECT public: explicit SecondWindow(QWidget *parent = nullptr); ~SecondWindow(); public slots: void mySlot(const QString &text); private: Ui::SecondWindow *ui; }; #endif // SECONDWINDOW_H ``` ```c++ // secondwindow.cpp #include "secondwindow.h" #include "ui_secondwindow.h" #include <QDebug> SecondWindow::SecondWindow(QWidget *parent) : QDialog(parent), ui(new Ui::SecondWindow) { ui->setupUi(this); } SecondWindow::~SecondWindow() { delete ui; } void SecondWindow::mySlot(const QString &text) { qDebug() << "Received signal: " << text; } ``` 在上面的代码中,`MainWindow` 界面中定义了一个名为 `mySignal` 的信号,并在按钮点击事件中发射该信号。`SecondWindow` 界面中定义了一个名为 `mySlot` 的槽函数,并在该函数中处理接收到的信号。 在 `MainWindow` 界面中,我们在构造函数中使用 `connect` 函数将 `mySignal` 信号与 `SecondWindow` 界面中的 `mySlot` 槽函数连接起来。具体来说,我们使用了 lambda 表达式来实现信号与槽函数的连接。当按钮被点击时,`mySignal` 信号将发射,并传递一个字符串参数给槽函数。 在 `SecondWindow` 界面中,我们实现了 `mySlot` 槽函数,并使用 `qDebug` 函数输出接收到的信号参数。 当我们在 `MainWindow` 界面中点击按钮时,它将发射 `mySignal` 信号,并将 `lineEdit` 中的文本作为参数传递给 `SecondWindow` 界面中的 `mySlot` 槽函数,最终在控制台中输出接收到的字符串参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值