开启single-tap - 解决问题的另一种思路

今天遇到一个问题,客户想要在选取图片时能够支持single-tap ,即单击一个就代表选择,而不用像以前那样单击一次代表选中,再单击一次才代表选择。
在symbian平台中我们可以直接用在AppUi调用BaseConstructL函数来开启,就像下面这样:

但在Qt平台中,由于UI的启动直接被封装起来,也没有接口供我们调用,这时让我们开启single-tap简直有点不可能。
让我们先来看看Qt中是怎么写的:

看到没?全是写的死死的。其实就是在symbian也没有可以修改flags的接口,只有查询的接口,你可以调用IsSingleClickCompatible(),IsTouchCompatible()等来查询,但没有修改的接口。

怎么办呢?看起来简单就是不可能了。
看看symbian的源码吧,也许可以找到出路。

    哦,原来管Single-tap的就是下面这句了:

    如果我们能获得iAknFlags就好办了,可是symbian并没有提供接口给我们。嘿嘿,不过我们还是有办法的,
    那就是指针,CAknAppUiBase的运行时的实例我们是可以获得的,只要我们可以算出iAknFlags在CAknAppUiBase类中的位置,用指针只向它不就可以了嘛。
    哈哈,真是无所不用其极啊。
    让我们看看如何能指向它呢,经过计算得出如下代码(注意这里使用的是GCC编译器):


    18就是iAknFlags在CAknAppUiBase类中的offset了,iAvkonAppUiBase我就不用说了。
    这样我们就顺利得到了flags,修改它就很容易了,通过以下代码我们就可以开启single-tap了:

    其中14是根据symbian源码中找到的对应数字,这里你也可以用enum,这样看起来可读性会更好一些。

    以上是解决symbian开发中解决问题的一个思路,虽然看起来并不是那么的友好,但实在是没有办法啊,symbian没有公开的API接口,
    同时Qt也不够完善,但我们的项目还是要做的,用邓爷爷的话说能抓到老鼠的猫就是好猫,哈哈。其实在我们探究出这个方法的过程中我们也可以学到很多
    既熟悉了symbian源码又增进了对C++的认识,不是嘛,哈哈。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值