首页 > 其他分享 >QFrame 与 QWidget的区别

QFrame 与 QWidget的区别

时间:2023-05-23 11:24:11浏览次数:41  
标签:控件 区别 self sys QWidget import QFrame

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,具体取决于您希望控件具有的外观和功能。

标签:控件,区别,self,sys,QWidget,import,QFrame
From: https://www.cnblogs.com/ghj1976/p/qframe-yu-qwidget-de-qu-bie.html

相关文章

  • linux DOS partition table 和 GPT partition table 在兼容性和性能上有什么区别,为什
    DOS分区表(也称为MBR分区表)和GPT分区表是两种不同的磁盘分区方案,它们在兼容性和性能方面有一些区别。兼容性:DOS分区表:DOS分区表是旧的磁盘分区方案,它在早期广泛使用,并且被几乎所有操作系统所支持,包括Windows、Linux和macOS。GPT分区表:GPT分区表是一种较新的磁盘......
  • this.$refs.ref 不存在 undefined v-if和v-show 的区别
    <divv-if='true'>  <div>....<el-inputref='ref'/></div></div> 上面的代码,引用this.$refs.ref=undefined; 改为v-show解决。 网上有好多说法是:this.$nextTick(()=>{放这里});在这里不能解决的。原因:v-if条件不满足,document中是不存在的,v......
  • ThreadLocal 和 InheritableThreadLocal 的区别
    结论:同一个ThreadLocal变量不能在子线程中获取到,而InheritableThreadLocal变量中的值可以在父子线程之间传递。例子:publicclassMain{privatestaticThreadLocal<String>threadLocal=newThreadLocal<>();privatestaticInheritableThreadLocal<String>i......
  • 【万象奥科】RK3568和RK3399有什么区别?
    ▎简介RK3568和RK3399都是Rockchip公司的处理器,具有不同的特点和适用场景。以下是它们的主要区别和应用场景。▎RK3568RK3568是新一代的高性能处理器,采用了22nm工艺,具有更高的性能和更低的功耗。它支持4K视频解码和编码,支持多种接口和协议,如HDMI、USB、PCIe、Gigabit Ethernet等。......
  • useRef 与 createRef 的区别
    两者区别:createRef每次渲染都会返回一个新的引用,而useRef每次都会返回相同的引用。useRef一般用于函数组件useRef不仅仅是用来管理DOMref的,它还相当于this,可以存放任何变量.当useRef的内容发生变化时,它不会通知您。更改.current属性不会导致组件重新渲染。因为......
  • 【iOS】MD5 与Base64 的区别
    MD5不可逆性(只能加密)。任意长度的明文字符串,加密后得到的密文字符串是长度固定的。Base64可逆性(能加密和解密)。可以将图片等二进制文件转换为文本文件。可以把非ASCII字符的数据转换成ASCII字符,避免不可见字符。......
  • 【软考——系统架构师】架构、系分、软设的区别和联系
    ......
  • MSSQLServer和SQL Server Express、LocalDB的区别
    转载:https://www.cnblogs.com/lucky-donkey/p/13544916.html MSSQLServer:全称MicrosoftSQL Server,微软的数据库服务。SQLServerExpress:MicrosoftSQL Server的一个免费版,功能上有一些限制。                  1.数据库的大小限制:SQ......
  • java中JDK和JRE有什么区别?
    JavaDevelopmentKit(JDK)和JavaRuntimeEnvironment(JRE)是两个不同的Java发行版。JDK是Java开发者所必需的软件开发工具包,包含了Java编译器、Java虚拟机(JVM)、Java运行时环境(JRE)以及各种Java开发工具,它可以用来开发和编译Java应用程序。除了JRE所包含的内容外,JDK还包含开......
  • 置换贴图和一般贴图的区别
    置换贴图这种效果通常是让点的位置沿面法线移动一个贴图中定义的距离。它使得贴图具备了表现细节和深度的能力,且可以同时允许自我遮盖,自我投影和呈现边缘轮廓。>>高度图,视差贴图(Bump-maps),置换贴图(displacement),法线贴图的本质:https://zhuanlan.zhihu.com/p/266434175>>置换贴......