关于Qt5 QML中Canvas画布叠加区域为透明时,如何传递鼠标事件到下层画布。

本文探讨了在Qt5 QML中Canvas画布设置为半透明时,如何处理鼠标事件,确保当鼠标在透明区域时,事件能传递到下层Canvas。作者提出通过判断鼠标点击点是否位于弧形区域内来转发信号,解决用户交互问题。
摘要由CSDN通过智能技术生成

本人的第一篇Qt文章!!以此开始激励自己学习!  本人只能算小菜鸟一只,大神们看的话不喜勿喷!


话不多说,看问题先: 下面的图片是所做东西的最后显示界面的一部分。每一个半椭圆形是一个Canvas画布,灰色半透明区域即画布矩形区域,但是只有弧形是我所需要的。可以很明显的看到灰色半透明区域与下层的组件有重合部分,此时如果需要选中下层Canvas,鼠标事件很容易被灰色区域所属的Canvas接收。这个问题虽然不影响功能实现,但是用户使用会有问题。

刚开始是想找自定义异性组件的解决办法,但是并没有在QML中找到相应的办法(如果在C++代码中有一个mask/setMask是实现)。于是想到了手动判定鼠标点击处是否在弧形区域内,不在区域内即转发信号进行判断,直到找到相应的眼睛看着点到的Canvas。

弧形是使用贝塞尔曲线所画,填充颜色。下面的代码是判断鼠标点击点是否在这个弧形内部。

 function judgePoint(mouseX,mouseY)         //传入参数是一个Canvas中的相对坐标
    {
 
        var up_counter = 0;
        var down_counter = 0;
        for(var t=0.0;t<1.0;t +=0.05)                          //以下计算过程是贝塞尔曲线取点以及判断一点与一小段线段的位置关系,曲线中取20点
        {
 
					//线段起点,计算方法是通过贝塞尔曲线方程而来
            var b_x = Math.pow(1-t,2)*t*3.0*canvas.width/10+3.0*(1-t)*t*t*canvas.width*9/10+t*t*t*canvas.width 
            var b_y = Math.pow(1-t,3)*canvas.height+3.0*Math.pow(1-t,2)*t*(-canvas.height*3/10+5)+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值