Я заново реализую mouseMoveEvent в QMenuBar, чтобы позволить мне перетаскивать безрамочное приложение вокруг себя (в основном, просто создавая свой собственный кадр вокруг моего приложения).Однако я пытаюсь отключить это поведение, когда мышь находится над элементом QMenu, что вызывает странное поведение (окна начинают следовать за вашей мышью, когда вы нажимаете на меню!).
Я думал, что это будет так же простокак вызов QMenuBar's self.childrenRect().contains(event.pos())
, однако это не работает.Из того, что я могу сказать, self.childrenRect()
на самом деле не возвращает прямоугольник элементов QMenu.Так какой же «правильный» способ сделать это?
Вот мой подкласс QMenuBar для справки:
class MoveMenu(QtGui.QMenuBar):
def __init__(self):
super(MoveMenu, self).__init__()
self.mouseStartLoc = QtCore.QPoint(0,0)
self.set_move = False
def mousePressEvent(self, event):
super(MoveMenu, self).mousePressEvent(event)
self.mouseStartLoc = event.pos()
# this is always testing False
if not self.childrenRect().contains(event.pos()):
self.set_move = True
def mouseMoveEvent(self, event):
super(MoveMenu, self).mouseMoveEvent(event)
if self.set_move:
globalPos = event.globalPos()
self.parent().move(globalPos - self.mouseStartLoc)
def mouseReleaseEvent(self, event):
super(MoveMenu, self).mouseReleaseEvent(event)
self.set_move = False