您的位置:首页 > 编程语言 > Java开发

java .net MFC QT事件处理机制

2007-08-05 12:45 661 查看
java事件处理机制
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实践处理
afx_msg void OnAppAbout();

DECLARE_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CTApp, CWinApp)

ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

END_MESSAGE_MAP()

c#中使用事件
1.创建一个委托Public delegate void delegateMe(object param);

2.将创建的委托与特定事件关联Public event delegateMe eventMe;

3.编写事件处理程序public void Notify();NotifyEveryOne(); 

4.利用编写的事件处理程序生成一个委托实例DelegateEvent eventSource = new DelegateEvent();

5.把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件eventSource.NotifyEveryOne +=new event_test.DelegateEvent.MyDelegate(objA.DispMethodA);
6.使用此事件 eventSource.Notify();
QT事件处理




当对象的内部状态发生改变,信号就被发射,在某些方面对于对象代理或者所有者也许是很有趣的。只有定义了一个信号的类和它的子类才能发射这个信号。

    class Foo : public
QObject

    {

       
Q_OBJECT

    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 * e ) {

      if ( e->type() == QEvent::KeyPress ) {

          QKeyEvent * ke = (QKeyEvent*) e;

          if ( ke->key() == Key_Tab ) {

              // 这里是特定的tab处理

              k->accept();

              return TRUE;

          }

      } else if ( e->type() >= QEvent::User ) {

          QCustomEvent * c = (QCustomEvent*) e;

          // 这里是自定义事件处理

          return TRUE;

      }

      QWidget::event( e );

  }

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc qt java .net object signal