Реализовать опцию Resize для виджета Qt Frameless - PullRequest
2 голосов
/ 20 августа 2011

Как я могу реализовать опцию изменения размера для бескаркасного виджета Qt, который используется в качестве главного окна?

Ответы [ 2 ]

3 голосов
/ 01 июня 2012

Я только что столкнулся с этой проблемой, и решил ее, добавив пользовательские обработчики 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
2 голосов
/ 20 августа 2011

Используйте QSizeGrip

Класс QSizeGrip предоставляет дескриптор изменения размера для окон верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...