我想模拟自定义小部件的 QDockWidget/QToolBar 行为,mousePressEvent
从一个位置取消固定小部件并将其固定到另一个位置。就像将上框架放置到“子”位置:
我可以使用以下代码取消固定它:
class DraggableSpectralFrame(SpectralFrame):
def __init__(self, parent=None):
super().__init__(parent)
self.setMouseTracking(True)
self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint)
self.oldPos = QPointF(self.pos())
self.local= QPointF(self.pos())
self.floating = False
def mousePressEvent(self, event):
self.oldPos = event.globalPos()
if self.hoverRect.contains(event.localPos()) and \
event.button() == Qt.LeftButton:
self.floating = True
self.local = event.localPos()
self.setParent(None)
self.show()
self.move((self.oldPos - self.local).toPoint())
def mouseMoveEvent(self, event):
self.oldPos = event.globalPos()
if self.floating:
self.move((self.oldPos - self.local).toPoint())
变形为窗口并以正确的方式移动窗口后我失去按下的功能的问题DraggableSpectralFrame
我必须再次单击/按下。没有额外的点击窗口仍然会对光标移动做出反应(由于self.floating
是True
),但很容易失去对急剧移动的关注。
可能有更简单的方法来实现这个想法,如果是这样的话 - 请告诉我!