QT事件处理

本文对比了QT与Swing的事件处理机制,介绍了QT中特有的声明绑定方式,并通过实例展示了如何利用这种方式实现信号与槽之间的连接与断开。
起先还担心QT从linux来,事件模型不一样,玩了以后发现完全多余, 熟悉swing或c#的事件处理就一点问题都没有。

和Swing的事件处理机制的一点点差别是,QT不使用对象注册那种方式,而是使用声明绑定的方式,更加灵活一些。
基本格式如下:

QObject::connect(sender, SIGNAL(signal), receiver, SLOT(slot));

SIGNAL表示对象的触发事件, SLOT表示相应的处理函数。 此处使用的是类似函数指针的做法,和c#很相似.相比java的inner class要简单干净一些。

这种做法还有个比较巧妙的地方,可以形成sender和receiver之间的自动关联,不用写多余代码。
比如下面的代码, 当spinbox的值发生变化时,自动把值设置给 slider。

QObject::connect(spinBox, SIGNAL(valueChanged(int)),
slider, SLOT(setValue(int)));

还有一种玩法, 把一个Signal绑定给另外一个signal,这样一个事件触发以后,另外一个对象的指定事件也会被触发

connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &)));


也可以移除SIGNAL和SLOT之间的绑定关系

disconnect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError()));


如果使用QT的designer,则还有一种玩法,使用名称约定的方式进行绑定。
比如
private slots:
void on_addButton_clicked();

这就绑定了 addButton的clicked事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值