信号和槽

  信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调

  connect(&b1, &QPushButton::pressed, this, &MainWidget::close);  参数一为信号发送者,二为信号。三为信号接收者,四为槽函数(接收到信号后执行的函数)

     此功能为:当按下按钮b1时,关闭主窗口。

自定义槽函数:

  槽函数和信号必须一致:没有返回值。参数一致。

自定义信号:

signals:
    void Mysignal();//这是一个信号,只需定义,无需实现。  可以重载
    void Mysignal(int, QString);

 

主窗口向子窗口发送信号:

connect(&b, &QPushButton::released, &SubWidget, &SubWidget::GetSlot);

子窗口向主窗口发送信号:

  必须先定义信号;再编写一个信号发送函数:

void SubWidget::SendSlot()
{
    emit Mysignal();//发送信号
    emit Mysignal(250, "I am a little boy");
}

  再如下发送:

connect(&b, &QPushButton::released, this, &SubWidget::SendSlot);

  主窗口接收:

connect(&w, SIGNAL(Mysignal()), this, SLOT(delSub()));

connect(&w, SIGNAL(Mysignal(int,QString)), this, SLOT(delSig(int,QString)));//这是QT5的新功能,可实现对重载信号的接收。
//必须在其头文件.h中如下定义槽函数,并实现
public slots:
    void delSub();
    void delSig(int, QString);

 

posted @ 2019-03-27 15:10  GodL  阅读(2634)  评论(0编辑  收藏  举报