接着前面的隐藏标题栏之后,我们可以自制关闭按钮,最大化按钮和最小化按钮,但是有一个功能可能我们没有办法很直接的实现

就是有标题栏的时候,程序可以直接通过鼠标拖动来改变位置。

现在没有标题栏了,怎么样才能实现拖动窗口来改变位置呢?

经过查阅PyQt官方文档,发现QMainWndow是继承QWidget类的

http://pyqt.sourceforge.net/Docs/PyQt4/qwidget.html

而QWidget里面有计个默认的监听方法,譬如:


那么按照面向对象的思想来说,我们只需重写这些方法,就可以达到我们需要的效果




下面就通过重写mousePressEvent和mouseMoveEvent来实现窗口的拖动:

import sys
from PyQt4.QtGui import *
from PyQt4.Qt import *
from PyQt4.QtCore import *

class AboutUsDialog(QDialog):
    def __init__(self):
        super(AboutUsDialog,self).__init__()
        self.setWindowFlags(Qt.FramelessWindowHint|Qt.Dialog)

    def mousePressEvent(self, e):
        if e.button()==Qt.LeftButton:
            self.move1=e.globalPos()-self.frameGeometry().topLeft()
            QApplication.postEvent(self,QEvent(174))
            e.accept()

    def mouseMoveEvent(self, e):
        if e.buttons()==Qt.LeftButton:
            self.move(e.globalPos()-self.move1)
            e.accept()
 

app = QApplication(sys.argv)
aboutus = AboutUsDialog()
aboutus.show()
sys.exit(app.exec_())

这个方法在QMainWindow下也是适用的,因为QMainWindow和QDialog都是继承自QWidget的类