我想创建一个半透明的信息窗口,不会妨碍用户的其他活动。任何对该窗口的点击都应该像窗口不存在一样被忽略。
您建议如何实现这样的行为?有没有简单的方法可以做到这一点,还是我必须遵循笨拙的解决方法?我考虑隐藏窗口,重新执行点击,然后再次显示窗口。但这仍然会破坏拖放手势。
您建议如何实现这样的行为?有没有简单的方法可以做到这一点,还是我必须遵循笨拙的解决方法?我考虑隐藏窗口,重新执行点击,然后再次显示窗口。但这仍然会破坏拖放手势。
看一下Qt::WidgetAttribute的枚举值:Qt::WA_TransparentForMouseEvents
:
启用此属性时,它会禁用鼠标事件传递到窗口小部件及其子级。鼠标事件将被传递给其他窗口小部件,就好像该窗口小部件及其子级不存在于窗口小部件层次结构中一样;鼠标点击和其他事件实际上会“穿过”它们。默认情况下,此属性被禁用。
QWidget * QApplication::widgetAt (const QPoint & point) [static]
的行为,该函数在内部用于决定应用程序中哪个窗口会获得鼠标事件。 - BillWId QWidget::effectiveWinId () const
获取小部件的窗口系统标识符(HWND)。然后,您可以通过SetWindowLong函数设置WS_EX_NOACTIVATE
[扩展窗口样式](http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543%28v=vs.85%29.aspx)。) - Bill我对“鼠标事件透明度”进行了更深入的研究(不知道确切的术语),并找到了this。
我认为没有一般且简单的方法来解决你的问题。你可能需要深入挖掘本地API。一旦事件到达应用程序,它们就不会自动转发到其他应用程序。
你们觉得呢?我是否注定要使用每个操作系统的本地API?