Перемещение по экрану кастомного интерфейса без стандартной панели Windows PyQt6
Мне очень понравился интерфейс, на GitHub, где автор реализует перемещение интерфейса через виджет QFrame под названием title_bar. Я решил попробовать сделать также, с поправками на PyQt6. В итоге, из-за того что в PyQt5 методы pos() и globalPos() наследуются из QMouseEvent, а в PyQt6 это QHelpEvent вся логика ломается. Кроме того в 6-ой версии PyQt эти методы вывод объекты с координатами по разной точности.
Метод отслеживания координат и перемещения окна:
def moveWindow(event):
if UIFunctions.returnStatus() == 1:
UIFunctions.maximize_restore(self)
if event.buttons() == QtCore.Qt.MouseButton.LeftButton:
pos = self.pos()
self.move(pos + event.globalPosition() - self.dragPos) #ОШИБКА В ЭТОЙ СТРОЧКЕ
self.dragPos = event.globalPosition()
event.accept()
Метод регистрации координат мышки по нажатию:
def mousePressEvent(self, event):
self.dragPos = event.globalPosition()
Если я меняю методы globalPos() на globalPosition() , то в конечном счёте когда я пытаюсь переместить окно, выскакивает исключение:
unsupported operand type(s) for +: 'QPoint' and 'QPointF'. Как раз потому что globalPosition() возвращает QPointF. 
А pos() возвращает QPoint
Вопрос: можно ли переписать существующий код чтобы работал на PyQt6 (переходить на 5 версию уже поздно), либо проще сделать такую логику с нуля свою? Мне кажется что достаточно будет перевести в QPoint в QPointF
Ответы (2 шт):
Я не могу проверить, но предложу попробовать (добавьте перед self.move(...)) :
print(f'QPointF --> QPoint: {QPoint(event.globalPosition().x(), event.globalPosition().y())}')
или
print(f'QPointF --> QPoint: {QPoint(int(event.globalPosition().x()), int(event.globalPosition().y()))}')
С self.dragPos, если что, надо проделать тоже самое.
P.S. Также почитайте https://www.qt.io/blog/input-events-in-qt-6 может что-то интересное найдете.
В общем, решение очень простое лично для себя я подобрал. Просто применив метод toPoint() алгоритм работает:
def moveWindow(event):
if event.buttons() == QtCore.Qt.MouseButton.LeftButton:
pos = self.pos()
glpos = event.globalPosition().toPoint()
self.move(pos + glpos - self.dragPos.toPoint())
self.dragPos = event.globalPosition()
event.accept()