gpt4 book ai didi

c++ - 我怎么知道鼠标是否在小部件上?

转载 作者:可可西里 更新时间:2023-11-01 18:08:13 26 4
gpt4 key购买 nike

我是 Qt (PyQt - PySide) 的新手。
我正在尝试构建一个自定义小部件,它是一个菜单。然而,我走上了一条艰难的道路,我似乎无法解决自己的问题。我已阅读文档,但我认为没有鼠标状态我可以验证以确定鼠标光标是否位于给定的小部件上。

我在 QWidgetmouseReleaseEvent 上调用函数。

例如:

def mouseReleaseEvent(self, e):     

触发此事件时,我必须知道鼠标实际上是在小部件上方还是在小部件之外(触发此事件的小部件)。

    if mouseCursorOverSelf == True:
# do something ..

我怎样才能做到这一点?我需要做什么?

非常感谢!

最佳答案

如果你想跟踪鼠标何时进入或离开小部件,你可以使用这样的东西:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class mainwindow(QtGui.QWidget):
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)

def enterEvent(self, event):
print "Mouse Entered"
return super(mainwindow, self).enterEvent(event)

def leaveEvent(self, event):
print "Mouse Left"
return super(mainwindow, self).enterEvent(event)

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
main = mainwindow()
main.show()
sys.exit(app.exec_())

如果你只是想检查鼠标是否在小部件上,你可以使用QWidget::underMouse()函数:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class mainwindow(QtGui.QWidget):
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)

self.button = QtGui.QPushButton("Check Mouse in 3 seconds")
self.button.clicked.connect(self.on_button_clicked)

self.layout = QtGui.QHBoxLayout(self)
self.layout.addWidget(self.button)

def mouseReleaseEvent(self, event):
if self.underMouse():
print "Do something"

return super(mainwindow, self).mouseReleaseEvent(event)

@QtCore.pyqtSlot()
def on_button_clicked(self):
QtCore.QTimer.singleShot(3000, self.checkMouse)

def checkMouse(self):
print "Under Mouse: {0}".format(self.underMouse())

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
main = mainwindow()
main.show()
sys.exit(app.exec_())

另一种方法涉及检查鼠标的位置是否在小部件的内部几何结构内:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class mainwindow(QtGui.QWidget):
def __init__(self, parent=None):
super(mainwindow, self).__init__(parent)

self.setMouseTracking(True)

def mouseReleaseEvent(self, event):
posMouse = event.pos()
if self.rect().contains(posMouse):
print "Under Mouse"

return super(mainwindow, self).mouseReleaseEvent(event)

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
main = mainwindow()
main.show()
main.resize(200, 200)
sys.exit(app.exec_())

关于c++ - 我怎么知道鼠标是否在小部件上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com