a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 105|回复: 0

[专业语言] JAVA认证:QWidget对象的Eventable接口详解(3)

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
// 判断是否存在事件6 u% i. k' O& S  ]
    def hasEvent(name : String) : Boolean = _events.contains(name.toEventName)
* r. W' G. w! s3 Y9 ^    // Qt事件覆盖
5 U* _; \9 I. r& V2 G( j1 p    override def event(event : QEvent) : Boolean = {
3 _; Q0 q5 }$ v3 ?" N    eventType2Name(event.`type`()) match {0 F" \% {  {  T! M9 d6 i
    case Some(name) =>( O* X' i, t4 s! h6 d' [$ K
    if (this.hasEvent(name)) {& v$ y! B$ C6 H' _$ O2 Y
    val handle = _events(name)。fire(this.asInstanceOf[T], event)
2 U0 e; O* V/ q$ f    }
8 }$ G/ W( ]2 w) e    case _ =>2 \/ `) y% w1 W! w/ \5 m6 ^
    }) y' b* A! _: I/ Q0 Z5 V; x2 I
    super.event(event)
- @6 I8 v4 f2 h' T* P) ^    }: F+ z- N9 p3 O3 [) f4 h2 f0 k
    }  
) T% j" t* b* |9 H' z    这个Eventable只是一个很初步的封装,只是针对所有的QWidget适用,我还有好些想法,比如延时事件激活,定时事件循环。并且希望能对QObject进行全部的适用,而对于Qt的信号槽,自然也要兼容。唉,想法太多,可惜时间太有限。先用着吧,能好像写js一样写事件声明,该知足了。; t! b( C, e8 P' Z
    下面奉上使用的代码:
( @, L, Q! O; r( u8 z/ f4 v    class Widget extends QWidget with Eventable[QWidget]. i( W) P9 K3 w8 E
    val w = new Widget()  w.addEvent("onClick", handle => {& g+ u+ N- ]8 c4 P2 W
    println("单击了!")  })  w.addEvents(3 F! N1 v7 J& f9 K! |) {
    "show" -> { handle =>
, M  u- r! W" `* p! `+ i: P    println("窗口显示了"): V0 A1 ?' W4 C% h! L! b
    },& e/ o$ L3 i! ~+ w$ ?! j! w  J
    "doubleClick" -> { handle =>% c0 B6 q3 P% W8 \
    println("双击了!")- A6 [1 [5 e& m3 D  {) z2 s1 X2 U5 ?
    }  )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-9-27 21:30 , Processed in 0.510903 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表