Предлагаемое решение перемещает окно, но курсор мыши переходит на 0,0 окна.Я хотел, чтобы курсор мыши оставался на x, y окна все время.
Вот обновленная версия кода [в QT5]:
X=0
X2=8 #!!!!
Y=0
Y2=30 #!!!!
class Main(QtWidgets.QMainWindow):
leftClick = False #! IMPORTANT
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
def mouseMoveEvent(self, event):
super(Main, self).mouseMoveEvent(event)
if self.leftClick == True:
self.move(event.globalPos().x()-X-X2,event.globalPos().y()-Y-Y2)
def mousePressEvent(self, event):
super(Main, self).mousePressEvent(event)
if event.button() == QtCore.Qt.LeftButton:
self.leftClick = True
global X,Y
X=event.pos().x()
Y=event.pos().y()
def mouseReleaseEvent(self, event):
super(Main, self).mouseReleaseEvent(event)
self.leftClick = False
Для безрамного окна (сделано сwindow.setMask()
) Мне нужны некоторые константы, такие как X2 и Y2, потому что «замаскированное» безрамное окно немного меньше, чем реальное рамочное окно.Пока не знаю, как рассчитать эту разницу.
UP. Через долгое время я обнаружил одну критическую ошибку.Если вы нажмете левую кнопку мыши на любой кнопке (сразу после запуска приложения) и перетащите курсор мыши от этой кнопки, ваше приложение будет аварийно завершено, поскольку мы ссылаемся на несуществующую переменную LeftClick .Вот почему в классе Main нам нужно создать LeftClick .