Qt5,透明窗口和滚轮事件

5

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

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的一个错误吗?有可能采取任何解决方法吗?
类似问题的解决方案似乎也不起作用: 如何在WPF中创建一个半透明窗口,允许鼠标事件通过 (Qt 5.6.1,Windows 10)

@IInspectable 哇,我不知道有这个设置。但是切换它并没有改变行为... - vines
1
顺便说一句,作为一种解决方法,安装一个QWheelEvent的事件过滤器。 - jonspaceharper
@JonHarper 现在已经检查过了,它是Qt::NoFocus。叹气... - vines
开一个缺陷报告吗? - jonspaceharper
@JonHarper 如果接下来几个小时内仍然没有回答,很可能是这样。 - vines
显示剩余2条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接