【发布时间】:2022-01-20 22:57:33
【问题描述】:
我正在尝试使用具有以下两种行为的 QWidget 在 PyQt5 中编写一个简单的应用程序:
- 覆盖鼠标光标
- 输入透明;这意味着它可以忽略鼠标输入并将其发送到后台小部件或操作系统 UI(即像覆盖行为)
我可以单独实现每个行为,即当我将它们组合在一起时,光标返回到它的默认状态(即我失去了覆盖它的能力)!
我想知道这在 QT 中是否可以实现?
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
# Goal no. 1: override mouse cursor
QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
w = QWidget()
w.setWindowOpacity(0.1)
# Goal no.2: Make widget transparent for input
w.setWindowFlags(w.windowFlags()
| QtCore.Qt.WindowTransparentForInput | QtCore.Qt.WindowStaysOnTopHint)
w.resize(900, 900)
w.show()
sys.exit(app.exec_())
【问题讨论】:
-
如果Qt窗口对鼠标输入是透明的,那么底层窗口一定要确定鼠标光标吗?否则,就不会有真正的透明度......
-
有没有办法将这两个功能结合到同一个应用程序中?我需要改变我的思维方式吗?
-
您似乎在问:“一个窗口可以同时是透明的和不透明的吗?”。你到底想达到什么目的?
-
我有一个 QT 应用程序,它将使用一个特殊的硬件来控制系统的鼠标光标......我需要为默认鼠标光标设置动画以显示一些状态/反馈......所以我想我可以通过创建一个透明小部件来利用 QT 来做到这一点,并且仍然利用那些帮助我覆盖鼠标光标的 QT 功能
-
我能够使用相关的系统 API 覆盖外部光标。但这是有风险的,不推荐......这就是为什么我现在试图在 QT 中实现这一点......但我认为你给了我一个好主意,即在系统光标位置旁边的小部件本身中绘制一些动画......我我不确定这是否有效,但我会调查它
标签: qt pyqt5 event-handling qt5 pyside6