// 判断是否存在事件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 ?
} ) |