添加链接 注册    登录
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
干练的煎饼果子  ·  如何在Django模板中使用jQuery捕获 ...·  3 月前    · 
想旅行的烈马  ·  中华人民共和国驻纽约总领事馆-首页·  1 年前    · 
愤怒的苹果  ·  mysql 聚合 条件判断 mysql ...·  2 年前    · 
买醉的吐司  ·  使用Tunnel命令过程中的常见问题_云原生 ...·  2 年前    · 
沉着的沙滩裤  ·  springboot获取不到客户端ip问题排 ...·  3 年前    · 
link之家  ›  Qt中,放在ScrollArea中的组件,其paintEvent陷入死循环的原因是? -
https://www.zhihu.com/question/43710246
风流的消防车
2 年前
Qt中,放在ScrollArea中的组件,其paintEvent陷入死循环的原因是?
最近写个绘图的程序,突然发现画板组件board的paintEvent会不停循环执行。把程序删减了之后,发现是在paintEvent中写了self.resize()的原因,这一句导致了画板组件大小变化。
然而,我在另一个示例程序中这样写,发现paintEvent只不过触发了2次(本来应该是窗口显示时触发1次),并没有循环。
又回来检查主程序,发现board是放在一个QScrollArea中的。
就是说:paintEvent循环触发的条件是: 1.paintEvent触发时执行了resize;2.组件放在ScrollArea中。缺一不可。
这是什么原理?该怎么解释?
下面附死循环的代码:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
'从原理上讲,paintEvent在update()、repaint()、窗口部件变化时触发'
'使用paintEvent时可能导致死循环'
从这个例子中可以看出,将重载了paintEvent()函数且包含self.resize()语句(条件1)的Widget,
放置于主窗口的ScrollArea(条件2)时,会导致死循环
class Board(QWidget):
    def __init__(self):
        super(Board, self).__init__()
    def paintEvent(self,event):
        print('*************paintEvent触发******************')
        self.resize(100, 100) #导致死循环条件1
class Display_window(QMainWindow):
    def __init__(self):
        super(Display_window, self).__init__()
        self.resize(300,200)
        self.board = Board()
        self.scrollArea = QScrollArea(self)
        self.scrollArea.setWidget(self.board) #导致死循环条件2
        self.scrollArea.setWidgetResizable(True)
 
推荐文章
干练的煎饼果子  ·  如何在Django模板中使用jQuery捕获PDF下载的GET请求事件并实现模态框自动关闭
3 月前
想旅行的烈马  ·  中华人民共和国驻纽约总领事馆-首页
1 年前
愤怒的苹果  ·  mysql 聚合 条件判断 mysql 聚合函数不用group by_mob64ca140c75c7的技术博客_51CTO博客
2 年前
买醉的吐司  ·  使用Tunnel命令过程中的常见问题_云原生大数据计算服务 MaxCompute-阿里云帮助中心
2 年前
沉着的沙滩裤  ·  springboot获取不到客户端ip问题排查 - 掘金
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
link之家 - 链接快照平台
© 2024 ~ 沪ICP备11025650号