在subwidget.h中声明一个signal. 和之前的信号函数重名但是有参数:
void backSignal(QString);
之后在subwidget.cpp的槽函数sendSignal()中也发送该信号:
emit backSignal("子窗口请求返回");
在mainwidget.h中声明一个槽函数来响应该信号:
void logSlot(QString);
并在mainwidget.cpp中定义该槽函数, 打印信号传过来的字符串:
void MainWidget::logSlot(QString log)
{
qDebug() << log;
}
因为使用到了qDebug, 所以需要在mainwidget.h中添加头文件:
#include <QDebug>
下面在mainwidget.cpp中建立连接即可:
connect(&subWin, backSignal, this, &MainWidget::logSlot);
如果没有重名信号的话, 这样写是没有问题的, 但是我们现在由两个backSignal信号, 一个不带参数, 一个带参数, 编译器是没办法区分的, 需要我们告诉它, 所以, 删掉那两条信号都是backSignal的connect语句重新建立连接:
void(SubWidget::*backSignal)() = &SubWidget::backSignal;
// 我是没有参数的backSignal, 叫backSignal1
connect(&subWin, backSignal, this, &MainWidget::backSlot);
void(SubWidget::*backSigna2)(QString) = &SubWidget::backSignal;
// 我是带一个QString参数的backSignal, 叫backSignal2
connect(&subWin, backSigna2, this, &MainWidget::logSlot);
保存后 Ctrl + R运行, 点击Back按钮, 会输出信号发送的字符串:
如果用Qt4的语法的话, 会十分简单: