QT的信号和槽

所谓信号槽,实际就是观察者模式(发布-订阅模式)。

当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。

也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

信号是由对象发射出去的消息,信号实际上是一个特殊的函数,不需要由程序员实现,而是由Qt的Qt Meta Object System实现。

槽实际上就是普通的函数,成员函数、全局函数、静态函数、lambda函数都可以!

当我们把对象的信号和槽绑定在一起之后,当信号触发时,与之绑定的槽函数将会自动调用,并把信号的参数传递给槽函数!

[static] QMetaObject::Connection connect(

const QObject *sender,

const QMetaMethod &signal,

const QObject *receiver,

const QMetaMethod &method,

, Qt::ConnectionType type = Qt::AutoConnection)

[static] QMetaObject::Connection connect(

const QObject *sender,

PointerToMemberFunction signal,

Functor functor)
 

解析:

  • sender: 信号的发送者
  • signal: 发送的信号
  • receiver: 信号接收者
  • method:接受到信号之后,自动调用的方法(槽函数)
  • type: 表示信号与槽的连接类型,有默认值

例如
Widget::Widget(QWidget* parent) :QWidget(parent) {

//设置窗口的大小

resize(200, 200);

QPushButton* btn = new QPushButton("我是个按钮", this);

connect(btn, &QPushButton::pressed, this, &Widget::close);

}

  • btn:作为信号的发送者
  • &QPushButton::pressed:信号函数,表示你pressed(点击)
  • this:信号的接收者,表示的就是Widget这个窗口
  • &Widget::close:槽函数,表示接收信号之后准备干什么,即close掉这个窗口。
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值