【问题标题】:Qt5, transparent window and wheel eventsQt5,透明窗口和滚轮事件
【发布时间】:2016-05-13 10:00:49
【问题描述】:

我有一个最简单的测试用例应用程序:

TransWidget.cpp:

TransWidget::TransWidget(QWidget *parent) :
    QWidget(parent, Qt::Window | Qt::FramelessWindowHint)
{
    setAttribute(Qt::WA_ShowWithoutActivating);
    setAttribute(Qt::WA_TransparentForMouseEvents);
    setAttribute(Qt::WA_TranslucentBackground);
}

void TransWidget::paintEvent(QPaintEvent *)
{
    // some code to mark the presence of the window
}

void TransWidget::wheelEvent(QWheelEvent * ev)
{
    ev->ignore(); // keeps getting here no matter what I try!
}

main.cpp:

#include "TransWidget.h"
#include "OpaqueWidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OpaqueWidget o;
    auto t = new TransWidget(&o);

    o.show();
    t->show();

    return a.exec();
}

不透明小部件仅在获得鼠标点击和滚轮事件时进行报告。透明小部件覆盖不透明小部件。

鼠标点击按预期工作:

  • 穿过透明区域到达不透明小部件;
  • 在透明小部件的绘制(因此不透明)区域中单击时会被透明小部件捕获。

无论轮子事件发生在何处,都会被透明小部件捕获。 用于 Qt4.8 的相同设置。这是Qt5中的错误吗?任何可能的解决方法?

类似问题的解决方案似乎也不起作用: How to create a semi transparent window in WPF that allows mouse events to pass through

(Qt 5.6.1,Windows 10)

【问题讨论】:

  • Windows 10 发生了很大变化。您是否尝试过转动设置 -> 设备 -> 鼠标和触摸板当我将鼠标悬停在非活动窗口上时滚动它们离开?不是您的问题的答案,而是缩小导致此问题的原因。
  • @IInspectable 哇,不知道这个设置)但是切换它不会改变行为......
  • 您是否检查过它没有为其焦点策略设置Qt::WheelFocus 标志?这不太可能,但这是我唯一能想到的。
  • 顺便说一句,作为一种解决方法,为QWheelEvent 安装一个事件过滤器。
  • @JonHarper 现在检查,它是 Qt::NoFocus。叹息……

标签: c++ qt winapi transparent mousewheel


【解决方案1】:

作为 Qt 错误被接受,详情请参阅https://bugreports.qt.io/browse/QTBUG-53418

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多