- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图通过重新实现 QWidget::mouseMoveEvent()
在 QWidget
中移动鼠标时捕获光标坐标。启用鼠标跟踪后,当我在主小部件周围移动光标时会生成鼠标移动事件。然而,当光标放在子部件上时,鼠标移动事件停止触发。
鼠标按下/释放事件在光标位于同一个子部件上时起作用,如果按住鼠标按钮则移动事件正确触发。我也尝试过对 child 启用鼠标跟踪,但似乎没有什么区别。 当鼠标悬停在子控件上时,如何触发鼠标移动事件?
这是一个演示问题的最小工作示例:
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget) :
def __init__(self):
QtGui.QWidget.__init__(self)
tabs = QtGui.QTabWidget()
tab1 = QtGui.QWidget()
tab2 = QtGui.QWidget()
tabs.addTab(tab1, "Tab 1")
tabs.addTab(tab2, "Tab 2")
layout = QtGui.QVBoxLayout()
layout.addWidget(tabs)
self.setLayout(layout)
self.setMouseTracking(True)
def mouseMoveEvent(self, event):
print 'mouseMoveEvent: x=%d, y=%d' % (event.x(), event.y())
app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setFixedSize(640, 480)
window.show()
sys.exit(app.exec_())
当鼠标移出 QTabWidget
时,鼠标坐标会按预期打印。除非按住鼠标按钮,否则它内部不会发生任何事情。
最佳答案
您的代码存在的问题是您需要明确地为所有小部件启用鼠标跟踪。您可以通过遍历主小部件的所有子项并为每个子项调用 setMouseTracking(True)
来完成此操作。在这里,我重写了 setMouseTracking()
来做到这一点:
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget) :
def __init__(self):
QtGui.QWidget.__init__(self)
tabs = QtGui.QTabWidget()
tab1 = QtGui.QWidget()
tab2 = QtGui.QWidget()
tabs.addTab(tab1, "Tab 1")
tabs.addTab(tab2, "Tab 2")
layout = QtGui.QVBoxLayout()
layout.addWidget(tabs)
self.setLayout(layout)
self.setMouseTracking(True)
def setMouseTracking(self, flag):
def recursive_set(parent):
for child in parent.findChildren(QtCore.QObject):
try:
child.setMouseTracking(flag)
except:
pass
recursive_set(child)
QtGui.QWidget.setMouseTracking(self, flag)
recursive_set(self)
def mouseMoveEvent(self, event):
print 'mouseMoveEvent: x=%d, y=%d' % (event.x(), event.y())
app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setFixedSize(640, 480)
window.show()
sys.exit(app.exec_())
关于python - QWidget::mouseMoveEvent 在光标悬停在子部件上时不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368295/
我在重载 mouseMoveEvent 时遇到了问题。 我将 QGraphicsView 子类化并重载了 mousePressEvent、mouseMoveEvent 和 mouseReleaseEv
我目前有一个绘制线条和矩形的程序。 void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *even
我正在尝试实现悬停功能,当我将鼠标悬停在项目的特定区域时,我会重新绘制项目。 class TestItem : public QQuickItem { Q_OBJECT public:
以下 Python 3 响应。 UI XML 代码为每个鼠标方向(标记为 X+、X-、Y+、Y-)显示 4 个 QProgessBar。 快速鼠标移动(圆圈)将使 4 个 QProgessBar 移动
我需要在小部件内移动鼠标: eventFilter 是不可能的,因为它会安装在 QApplication 上。小部件在类型层次结构中的位置很低。将此小部件向上传递到创建 QApplication 对象
快速提问,为什么: void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { QGraphicsScene::mous
我想使用python和pyqt5制作裁剪图像工具 下面的代码,我无法使用 mouseMoveEvent 和 mouseReleaseEvent图形 View 。 但是,我只能在图形 View 上使用
我正在编写 Qt 应用程序,当鼠标移到屏幕中的某个区域时播放淡入动画,当鼠标移出同一区域时播放淡出动画。 我已经在 stack overflow 中找到了类似的问题,但是,它并没有完全回答我的问题。
我正在开发一个以 Qt 4.8 作为 GUI 框架的 C++ 应用程序:一个子类 QGraphicsView 渲染一个子类 QGraphicsScene,其中包含一个或多个子类 QGraphicsPi
我需要在我的主窗口小部件中获取一个移动事件,但 QGraphicsView 捕获了该事件,所以我无法在我的主窗口小部件中获取它。有什么方法可以关闭它,这样我就可以像在我的小部件中捕获任何 mousem
我有以下 PyQt 代码: import sys from PyQt5.QtWidgets import QMainWindow, QApplication from PyQt5.QtChart im
我这里有一个奇怪的问题。 我正在开发一个应用程序,在我的一个类中我正在监视我的鼠标事件。 奇怪的是,我的鼠标移动事件只有在按下任何鼠标按钮时才会被调用。 我什至没有过滤方法中的任何按钮按下;除非我单击
我试图通过重新实现 QWidget::mouseMoveEvent() 在 QWidget 中移动鼠标时捕获光标坐标。启用鼠标跟踪后,当我在主小部件周围移动光标时会生成鼠标移动事件。然而,当光标放在子
我有一个自定义的 QGraphicsScene,其中有一个 mouseMoveEvent(QGraphicsSceneMouseEvent *event); 当我用鼠标悬停在场景上时,mouseMov
所以我有一个无框架的 QDialog,我希望它能够通过单击并拖动它来移动。给定下面的代码,拖动对话框总是将对话框的左上角 (0,0) 捕捉到鼠标。我该如何避免这种情况,或者更确切地说,它的数学原理是什
我正在开发一个简单的绘画程序。Qt(和 KDE)似乎是实现它的简单方法。我发现 Qt 非常容易使用,但现在我遇到了一个问题。 当我在我的程序中画东西时,如果我快速移动鼠标,鼠标会跳过。 像这样: 它应
以下示例中,mouseMoveEvent 和 mousePressEvent 中的鼠标位置不同。这是由于增加的缩放而发生的。没有缩放,位置是相同的。 我是否必须根据更改后的缩放来更新boundingR
我试图在透明的 QDeclarativeItem 中捕获鼠标事件,将其包裹在 QML 中的所有其他元素周围,并在整个程序中记录有关鼠标事件的信息。mouseMoveEvents(QGraphicsSc
我尝试在PyQt5和Python3.5中使用mouseMoveEvent和mousePressEvent,但是当我点击鼠标时没有任何反应。我的代码如下,有什么问题吗? from PyQt5 impor
这两个事件都在裸主窗口上正常工作,但是当我在放置在主窗口内的 graphicsView 中按下时,只有 mousePressEvent 正在响应。 谁能澄清这个问题? UPD:这是代码 #includ
我是一名优秀的程序员,十分优秀!