zoukankan      html  css  js  c++  java
  • linux下鼠标穿透和取消穿透--linux小白,大神无视

    最近在用qt写一个跨平台的软件,因为设置了无边框,并且我自己给程序窗口加了阴影,阴影范围又比较大

    所以必须给阴影区域加上鼠标穿透才能有更好的体验。

    上网查了一下,在windows下使用SetWindowLong就行

    在linux下的搜了好久也找到了一个方法

    就是XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput,

                    0,0, NULL, 0, ShapeSet, YXBanded);(需要#include <X11/extensions/shape.h>)
    我试了一下,的确有效,但是问题来了,设置穿透后怎么取消呢?
    这个问题我又搜了很久,但是这次没那么幸运了,在百度和谷歌上都没有搜到相关问题
    对于我这个linux小白来说可愁坏了
    但是工夫不负有心人,试了一晚上,终于对这个函数有一点了解了,取消鼠标穿透的方法也试出来了。
    下面就分享给大家

    转发请注明出处(雨后星辰):http://www.cnblogs.com/AfterTheRainOfStars/p/4030042.html

    1 XRectangle* myrect = new XRectangle; 
    2 myrect->x = 0;
    3 myrect->y = 0;
    4 myrect->width = width();
    5 myrect->height = height();
    6 XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput, 0, 0, myrect,1,ShapeSet,YXBanded);

     在设置鼠标穿透的时候给函数传的第六个参数为NULL

    查看函数的定义发现这个参数是XRectangle*类型的

    下面直接说结论,当设置鼠标穿透的时候,如果这个参数为NULL,那整个窗口都将被穿透

    然后第七个参数就是控制是设置穿透和取消穿透(取消为1)的了

    但是,取消穿透的时候必须设置区域。不然设置第七个参数为1的时候程序会执行出错

    我先前的误区就是在设置完第七个参数之后程序闪退,就一位那个参数不能动,后面就一直实验其他参数,但是都不行

    后来再看一个博客的时候灵机一动就试了试将第六个参数的NULL改为一个XRectangle*对象,然后将第七个参数改为1就没有问题了。

    这就是我解决问题的过程,希望能帮到大家。

  • 相关阅读:
    WebQQ协议分析(9)——聊天(2)
    我的程序员之路(3)——学生时代(3)
    我的程序员之路(2)——学生时代(2)
    我的程序员之路(1)——学生时代(1)
    WebQQ协议分析——目录
    我的程序员之路(4)——工作半年
    WebQQ协议分析(7)——获取群信息(2)
    WebQQ协议分析(8)——聊天(1)
    VS2008编译器下ACE的配置
    WebQQ协议分析(10)——聊天(3)
  • 原文地址:https://www.cnblogs.com/AfterTheRainOfStars/p/4030042.html
Copyright © 2011-2022 走看看