Я только что столкнулся с этой проблемой, и решил ее, добавив пользовательские обработчики mouseEvent для моего QMainWindow. Я использую PyQt, но он должен быть довольно похож на C ++.
В моей реализации перетаскивание правой кнопкой мыши в любом месте на бескаркасном виджете (называемое MyClass
) изменяет его размер.
Когда правая кнопка мыши нажата, сохраните координаты:
def mousePressEvent(self, event):
super(MyClass, self).mousePressEvent(event)
if event.button() == QtCore.Qt.RightButton:
self.rdragx = event.x()
self.rdragy = event.y()
self.currentx = self.width()
self.currenty = self.height()
self.rightClick = True
Если мышь перемещается, когда кнопка еще нажата (т.е. когда она перетаскивается), измените размер окна QMainWindow. Не позволяйте ему становиться меньше предопределенного минимального размера.
def mouseMoveEvent(self, event):
super(Myclass, self).mouseMoveEvent(event)
if self.rightClick == True:
x = max(frame.minimumWidth(),
self.currentx + event.x() - self.rdragx)
y = max(frame.minimumHeight(),
self.currenty + event.y() - self.rdragy)
self.resize(x, y)
Когда кнопка мыши отпущена, установите для переменной кнопки значение False, чтобы остановить изменение размера при движении.
def mouseReleaseEvent(self, event):
super(MyClass, self).mouseReleaseEvent(event)
self.rightClick = False