zoukankan      html  css  js  c++  java
  • 信号和槽

      信号槽是 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);
  • 相关阅读:
    「USACO 2020.12 Platinum」Sleeping Cows
    拉格朗日反演 (Lagrange Inversion)
    「ROI 2016 Day1」人烟之山
    「ROI 2016 Day2」二指禅
    ZJOI2016 大森林
    CF1119H Triple
    [ZJOI2016]线段树
    CF1237F
    NOI2018 情报中心
    CF1270I Xor on Figures
  • 原文地址:https://www.cnblogs.com/lr1402585172/p/10607689.html
Copyright © 2011-2022 走看看