当前位置:   article > 正文

关于linux下实现一个QT悬浮窗要注意的地方_linux qt控制其他应用窗口

linux qt控制其他应用窗口

一般情况下我们想实现一个悬浮窗或者小部件,要求透传鼠标事件,且在大于给定的透明度时又需要拦截鼠标事件,这个悬浮窗当然也要支持透明度设置。

实现代码如下:

FloatWidget::FloatWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::FloatWidget)
{
    ui->setupUi(this);
    resize(200, 300);
    setPacity(0.6);
    setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Window);
}

void FloatWidget::setPacity(float value)
{
    if (value <= 0.8) {
        setAttribute(Qt::WA_TransparentForMouseEvents, true);
    } else {
        setAttribute(Qt::WA_TransparentForMouseEvents, false);
    }
    setWindowOpacity(value);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

实现上述代码很简单,但是如果不小心使用就会导致有时候鼠标可以透传但是透明度设置不生效。有时候透明度设置可以生效但是鼠标又无法透传。

在ubuntu22.04经过多次实测后,我们需要优化代码为:

FloatWidget::FloatWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::FloatWidget)
{
    ui->setupUi(this);
    resize(200, 300);
    setWindowFlags(windowFlags() | Qt::FramelessW
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/962506
推荐阅读
相关标签
  

闽ICP备14008679号