我正在尝试使用centralWidget和dockWidget实现QMainWindow。当用户调整停靠小部件的大小时,我希望为停靠小部件调用resizeEvent并返回一些值。我已经为完整的QMainWindow实现了resizeEvent,它工作正常。我如何为不作为另一个从Qwidget继承并在其中实现resizeEvent的类以及随后在QMainwindow中创建对象的类创建一个名为Qwidget的dockWidget的resizeEvent。第一个给出的示例工作正常。
class ui(QMainWindow):
def __init__(self):
super().__init__()
self.bottom_dock_widget = DockWidget('Results')
self.addDockWidget(Qt.BottomDockWidgetArea, self.bottom_dock_widget)
self.resize(500, 500)
def resizeEvent(self, event):
print('mainWindow')
self.update()
class DockWidget(QDockWidget):
def __init__(self, name, image_view):
super().__init__()
self.setWindowTitle(name)
def resizeEvent(self, event):
print('in Dock')
self.update()
是否有一种方法可以实现这样的示例:
class ui(QMainWindow):
def __init__(self):
super().__init__()
self.bottom_dock_widget = QDockWidget('Results')
self.addDockWidget(Qt.BottomDockWidgetArea, self.bottom_dock_widget)
self.resize(500, 500)
但是仅能够为停靠窗口小部件调用resizeEvent
def resizeEvent(self, event):
print('dock')
self.update()
类似于具有范围的c ++
def bottom_dock_widget :: resizeEvent(self):
[如果您想听到窗口小部件的调整大小事件,则不必重写resizeEvent()
方法,因为它足以安装分析了QEvent::Resize
事件的事件过滤器
import sys
from PyQt5.QtCore import QEvent, Qt
from PyQt5.QtWidgets import QApplication, QDockWidget, QMainWindow
class UI(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.bottom_dock_widget = QDockWidget("Results")
self.bottom_dock_widget.installEventFilter(self)
self.addDockWidget(Qt.BottomDockWidgetArea, self.bottom_dock_widget)
self.resize(500, 500)
def eventFilter(self, obj, event):
if obj is self.bottom_dock_widget and event.type() == QEvent.Resize:
print("dock")
return super().eventFilter(obj, event)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = UI()
w.show()
sys.exit(app.exec_())