a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 89|回复: 0

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
// 判断是否存在事件
7 Y+ ~3 r! l" e; K7 @- _% J9 }    def hasEvent(name : String) : Boolean = _events.contains(name.toEventName). m/ H* a( l; f+ m
    // Qt事件覆盖3 b9 m* n3 p' Y5 M# \
    override def event(event : QEvent) : Boolean = {
0 I# y. j0 _9 r# n* f$ A# K( y3 J    eventType2Name(event.`type`()) match {
2 Y4 _5 ~: Q& E; ^4 I    case Some(name) =>: e' d! @; J$ M6 d
    if (this.hasEvent(name)) {
/ @, q9 ^" k( D% T    val handle = _events(name)。fire(this.asInstanceOf[T], event)0 M& E( Z+ G5 n
    }
; m( G+ g  G6 L    case _ =>" l. K0 r( i6 ^
    }( x9 X* E9 g7 P0 |
    super.event(event)6 E- F0 |  P) U; l
    }
+ g8 k  v$ t* u    }  " Y, M; v' I3 X+ I
    这个Eventable只是一个很初步的封装,只是针对所有的QWidget适用,我还有好些想法,比如延时事件激活,定时事件循环。并且希望能对QObject进行全部的适用,而对于Qt的信号槽,自然也要兼容。唉,想法太多,可惜时间太有限。先用着吧,能好像写js一样写事件声明,该知足了。
6 I6 D' G, n& \; d# m    下面奉上使用的代码:! z  ?, M  o5 Q$ h8 Y$ m- H3 D
    class Widget extends QWidget with Eventable[QWidget]; `9 L+ y$ |( T( y! g2 t+ H. x
    val w = new Widget()  w.addEvent("onClick", handle => {
. f8 l5 v0 S: q+ t' w    println("单击了!")  })  w.addEvents(
; K9 f! Q- Y: Q( k0 ]    "show" -> { handle =>6 B  T9 e. J" |  [+ h  I/ v; [) A
    println("窗口显示了")% L8 F, B6 L/ i: h
    },& Z3 a" ^& N. K. N
    "doubleClick" -> { handle =>
) w+ }- ^9 f" y% Y    println("双击了!")
  p2 t; T1 ~% K9 m    }  )
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 20:23 , Processed in 0.149921 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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