导航

QFrame 与 QWidget的区别

Posted on 2023-05-23 11:16  蝈蝈俊  阅读(1858)  评论(0编辑  收藏  举报

Qt中的QFrame和QWidget是两个不同的控件类,
它们的继承关系如下:

QWidget <- QFrame <- QPushButton,QLabel… 

QWidget(窗口部件)

  • QWidget是Qt中所有用户界面元素的基类,用于创建可视化的窗口或控件。
  • 它可以包含其他子部件,并提供了一些基本的绘制和事件处理功能。
  • QWidget本身并不提供任何特定的外观或布局,因此通常用作其他控件的容器。

下面是一个QWidget的简单示例:

import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

widget = QWidget()
widget.resize(250, 150)
widget.setWindowTitle('QWidget Example')
widget.show()

sys.exit(app.exec_())

QFrame(帧)

  • QFrame是QWidget的子类,它提供了一些外观和边框装饰的功能。
  • 它可以用于创建具有边框、阴影和其他外观效果的控件。
  • QFrame还提供了一些额外的绘制功能,例如绘制线条、背景和图像。

下面是一个QFrame的简单示例:


import sys
from PyQt5.QtWidgets import QApplication, QFrame

app = QApplication(sys.argv)

frame = QFrame()
frame.setFrameStyle(QFrame.Box | QFrame.Raised)
frame.setGeometry(100, 100, 250, 150)
frame.setWindowTitle('QFrame Example')
frame.show()

sys.exit(app.exec_())


QWidget 只支持背景、背景剪辑和背景原点属性。
如果您从 QWidget 派生子类,则需要为自定义QWidget 提供以下 paintEvent 方法:

from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QPainter, QStyleOption
from PyQt5.QtCore import Qt

class CustomWidget(QWidget):
    def paintEvent(self, event):
        opt = QStyleOption()
        opt.initFrom(self)
        painter = QPainter(self)
        self.style().drawPrimitive(QStyleOption.PE_Widget, opt, painter, self)


在上述代码中,我们从QWidget派生了一个自定义的控件CustomWidget,并重写了其paintEvent方法。在paintEvent方法中,我们使用QStyleOption、QPainter和self.style()来绘制控件的外观。

总结

QWidget用于创建一个基本的窗口部件,而QFrame用于创建一个带有边框的窗口部件。您可以根据需要选择使用QWidget或QFrame,具体取决于您希望控件具有的外观和功能。