C++ Qt5,透明窗口和控制盘事件
我有一个最简单的测试用例应用程序: TransWidget.cpp: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::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();
}
不透明小部件只会在鼠标点击和滚轮事件发生时报告。透明小部件覆盖不透明小部件
鼠标单击按预期工作:
- 穿过透明区域进入不透明窗口小部件李>
- 当在透明小部件的绘制(因此不透明)区域单击时,会被它捕获
(Qt 5.6.1,Windows 10)被认为是Qt错误,请参阅以了解详细信息。Windows 10发生了很大变化。您是否尝试过将设置->设备->鼠标和触摸板:当我将鼠标悬停在非活动窗口上时,将其关闭?这不是对您问题的回答,而是缩小导致此问题的原因。@IInspectable哇,我不知道此设置)但切换它不会改变行为…您是否检查过它没有为其焦点策略设置
Qt::WheelFocus
标志?这不太可能,但这是我能想到的唯一一件事。顺便说一句,作为一种解决办法,为qwheeleevent
@JonHarper安装一个事件过滤器现在检查,它是Qt::NoFocus。叹息。。。