实现Qt Frameless小部件的Resize选项

时间:2011-08-19 22:56:00

标签: c++ qt

如何为Qt无框小部件实现调整大小选项,将其用作主窗口?

2 个答案:

答案 0 :(得分:3)

我刚刚遇到了这个问题,我通过为QMainWindow添加自定义mouseEvent处理程序解决了这个问题。我正在使用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

答案 1 :(得分:2)

使用QSizeGrip

  

QSizeGrip类提供了一个调整大小句柄,用于调整顶级窗口的大小。