Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt5,透明窗口和控制盘事件_C++_Qt_Winapi_Transparent_Mousewheel - Fatal编程技术网

C++ Qt5,透明窗口和控制盘事件

C++ Qt5,透明窗口和控制盘事件,c++,qt,winapi,transparent,mousewheel,C++,Qt,Winapi,Transparent,Mousewheel,我有一个最简单的测试用例应用程序: TransWidget.cpp: TransWidget::TransWidget(QWidget *parent) : QWidget(parent, Qt::Window | Qt::FramelessWindowHint) { setAttribute(Qt::WA_ShowWithoutActivating); setAttribute(Qt::WA_TransparentForMouseEvents); setAttr

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

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();
}
#包括“TransWidget.h”
#包括“OpaqueWidget.h”
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
蛋白石;
自动t=新的TransWidget(&o);
o、 show();
t->show();
返回a.exec();
}
不透明小部件只会在鼠标点击和滚轮事件发生时报告。透明小部件覆盖不透明小部件

鼠标单击按预期工作:

  • 穿过透明区域进入不透明窗口小部件
  • 当在透明小部件的绘制(因此不透明)区域单击时,会被它捕获
控制盘事件无论发生在何处都会被透明小部件捕获。 与Qt4.8使用的设置相同。这是Qt5中的一个bug吗?有可能的解决办法吗

类似问题的解决方案似乎也不起作用:


(Qt 5.6.1,Windows 10)

被认为是Qt错误,请参阅以了解详细信息。

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