Я пытаюсь найти способ отловить событие, когда пользователь перемещает Qdialog из titleBar.
Моя цель - прикрепить событие перетаскивания, чтобы закрепить мой собственный qdialog внутри моего главного окна. (в Linux)
Другими словами, делать то, что делают dockwidget (я могу использовать dockwidget), я должен делать то же самое с Custom Qdialog (или виджетом с флагами Qt.Window)
Я вижу в C ++ исходный код Qt, чем для QDockWidget, они используют такие вещи:
bool QDockWidget::event(QEvent *event)
{ [...]
case QEvent::NonClientAreaMouseMove:
case QEvent::NonClientAreaMouseButtonPress:
case QEvent::NonClientAreaMouseButtonRelease:
case QEvent::NonClientAreaMouseButtonDblClick:
d->nonClientAreaMouseEvent(static_cast<QMouseEvent*>(event));
Но когда я пытаюсь поймать событие такого рода на pyside, я не получаю ничего:
def event(self, e):
print('event %s' % e.type())
return super(myDyalig,self).event(e)
event PySide2.QtCore.QEvent.Type.ActivationChange
event PySide2.QtCore.QEvent.Type.UpdateRequest
event PySide2.QtCore.QEvent.Type.Paint
# I recieve only this move event when user stop moving (when he
# release the button)
event PySide2.QtCore.QEvent.Type.Move
event PySide2.QtCore.QEvent.Type.WindowActivate
event PySide2.QtCore.QEvent.Type.ActivationChange
event PySide2.QtCore.QEvent.Type.UpdateRequest
event PySide2.QtCore.QEvent.Type.Paint
Есть идеи, как это сделать? (или другая идея, как реализовать событие перетаскивания с помощью qdialog)
Edit:
минимальный пример:
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
class CustomDialog(QDialog):
def __init__(self, parent=None):
super(CustomDialog,self).__init__(parent)
self.setFixedSize(QSize(200,200))
def event(self, e):
print('event %s' % e.type())
return super(CustomDialog,self).event(e)
def main():
import sys
app = QApplication(sys.argv)
dial = CustomDialog()
dial.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()