Qt5,透明的车窗和车轮事件

Qt5, transparent window and wheel events

本文关键字:事件 车窗 透明 Qt5      更新时间:2023-10-16

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

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.,Windows 10)

被接受为Qt错误,请参阅https://bugreports.qt.io/browse/QTBUG-53418详细信息。