java .net MFC QT事件处理机制

本文介绍了Java、MFC、C#及QT等不同平台下的事件处理机制,包括自定义事件类、监听者接口、事件激发者接口的定义,以及具体的实现步骤。通过对比不同平台的事件处理方式,帮助读者理解其内在原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java事件处理机制<wbr></wbr>
1 开发自定义事件类。
public class PropertyEvent extends EventObject {
public PropertyEvent(){}
}
2 定义监听者接口。
public interface PropertyListener extends EventListener {
public void propertyChanged(PropertyEvent propertyEvent);
}
3 定义事件激发者的接口。
public void add监听者(监听者);
public void remove监听者(监听者);
protected void process事件(事件);
4 实现事件激发者.
5 实现监听这接口。

MFC实践处理<wbr></wbr>
afx_msg void OnAppAbout();
DECLARE_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CTApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
END_MESSAGE_MAP()

c#中使用事件<wbr></wbr>
1.创建一个委托 Public delegate void delegateMe(object param);<wbr></wbr>
2.将创建的委托与特定事件关联 Public event delegateMe eventMe;<wbr></wbr>
3.编写事件处理程序 public void Notify();NotifyEveryOne(); <wbr></wbr><wbr></wbr>
4.利用编写的事件处理程序生成一个委托实例 DelegateEvent eventSource = new DelegateEvent();<wbr></wbr>
5.把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件 eventSource.NotifyEveryOne +=new event_test.DelegateEvent.MyDelegate(objA.DispMethodA);<wbr></wbr><wbr></wbr>
6.使用此事件 eventSource.Notify();<wbr></wbr><wbr></wbr><wbr></wbr>
QT事件处理<wbr></wbr>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>
<wbr></wbr><wbr></wbr>
当对象的内部状态发生改变,信号就被发射,在某些方面对于对象代理或者所有者也许是很有趣的。只有定义了一个信号的类和它的子类才能发射这个信号。
class Foo : public QObject<wbr></wbr><wbr></wbr>
{
Q_OBJECT<wbr></wbr><wbr></wbr>
public:
Foo();
int value() const { return val; }
public slots:
void setValue( int );//槽
signals:
void valueChanged( int );//信号
private:
int val;
};
当一个和槽连接的信号被发射的时候,这个槽被调用。槽也是普通的C++函数并且可以像它们一样被调用;它们唯一的特点就是它们可以被信号连接。槽的参数不能含有默认值,并且和信号一样,为了槽的参数而使用自己特定的类型是很不明智的。
Foo a, b;
connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));//连接
b.setValue( 11 );
a.setValue( 79 );
b.value();
QT的消息处理过程
bool MyClass:event( QEvent<wbr></wbr><wbr></wbr> * e ) {
if ( e-> type<wbr></wbr><wbr></wbr>() == QEvent::KeyPress ) {
QKeyEvent<wbr></wbr><wbr></wbr> * ke = (QKeyEvent*) e;
if ( ke-> key<wbr></wbr><wbr></wbr>() == Key_Tab ) {
// 这里是特定的tab处理
k->accept();
return TRUE;
}
} else if ( e-> type<wbr></wbr><wbr></wbr>() >= QEvent::User ) {
QCustomEvent<wbr></wbr><wbr></wbr> * c = (QCustomEvent*) e;
// 这里是自定义事件处理
return TRUE;
}
QWidget:: event<wbr></wbr><wbr></wbr>( e );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值