2012-04-06 60 views
5

我想创建一个半透明的信息窗口,不妨碍用户的其他活动。任何对窗口的点击都应该通过,就好像窗口不在那里一样。QMainWindow忽略点击,将它们传递到背景窗口

您会如何建议实施此类行为?有没有一个简单的方法来做到这一点,或者我必须遵循一个笨拙的解决方法吗?我想隐藏窗口,重新执行点击,然后再次使窗口可见。但是,这仍然会拖累拖动手势。

+0

你有没有设法实现这个?我正在尝试执行相同的操作。 – Kolyunya 2017-05-02 20:48:06

回答

6

Qt::WidgetAttribute枚举值请看:Qt::WA_TransparentForMouseEvents

启用后,该属性将禁用交付鼠标事件来 小部件和它的孩子。将鼠标事件传递到其他 小部件,就好像小部件及其子项不在 小部件层次结构中;鼠标点击和其他事件有效地“通过 通过”他们。该属性默认是禁用的。

+0

赞[this](http://i.imgur.com/yGB2Q.png)?我可能是错的,但它似乎不适用于Windows。 – Pieter 2012-04-06 17:14:24

+0

@Pieter你想让点击通过你的半透明信息窗口到另一个属于同一个或另一个应用程序的窗口吗? – Bill 2012-04-07 08:17:38

+0

@Pieter这里重要的是,据我所知,当且仅当该窗口属于相同的Qt应用程序时,您在具有Qt :: WA_TransparentForMouseEvents属性的半透明信息窗口上的点击才会被另一个窗口接收。我检查了Qt源代码,提及的属性影响了'QWidget * QApplication :: widgetAt(const QPoint&point)[static]'的行为,它在内部用于决定应用程序的哪个窗口获取鼠标事件。 – Bill 2012-04-07 08:30:33

0

我对“鼠标事件透明度”(不知道确切的术语)做了一些研究,发现this

我不认为有一个一般的和简单的方法来解决你的问题。您可能需要深入了解本机API。一旦事件到达应用程序,它们就不会自行转发到其他应用程序。

你们认为什么?我注定要使用每个操作系统的本地API吗?