PySide QEvent崩溃后

时间:2013-06-25 07:07:38

标签: pyside

我正在使用PySide 1.1.1和python 2.7在Linux Ubuntu 12.10上工作  通过QStateMachine发布QEvent时遇到问题。

如果我想让它工作,我必须保留对事件的引用,否则它会崩溃。  我已经设置了一些示例代码来说明我的问题。

我想知道我做错了还是已知问题,是否应该使用解决方法(保留对事件的引用)?

#!/usr/bin/python

from __future__ import print_function
import sys
from PySide.QtCore import *
from PySide.QtGui import *

app = QApplication(sys.argv)
sm = QStateMachine()
init = QState(sm)
sm.setInitialState(init)
sm.start()

e = None
def no_crash():
    global e
    print("send an event that doesn't crash...")
    e = QEvent(QEvent.Type(QEvent.registerEventType()))
    sm.postEvent(e)

def crash():
    print("and one that does...")
    e = QEvent(QEvent.Type(QEvent.registerEventType()))
    sm.postEvent(e)

QTimer.singleShot(2000, no_crash)
QTimer.singleShot(4000, crash)

sys.exit(app.exec_())

先谢谢你的帮助

皮尔

1 个答案:

答案 0 :(得分:0)

这可能是PySide中的一个错误。

当我运行你的例子时,我看到的是因为双重免费而崩溃。当python事件对象超出范围时,或者当StateMachine删除事件时,可能会破坏底层C ++事件对象,如documentation所示:

  

状态机获取事件的所有权,并在处理完事件后将其删除。

如果StateMachine负责该活动,您不需要保留参考。

最好提交bug report

相同的代码不会因PyQt4而崩溃。