2013-06-25 89 views
0

我正在使用PySide 1.1.1和python 2.7 Linux Ubuntu 12.10 012,通过QStateMachine发布QEvent时遇到问题。PySide 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_()) 

感谢由您的帮助

皮埃尔

回答

0

这可能在PySide的错误。

我在运行示例时看到的内容是由于双重空闲而导致的崩溃。大概底层的C++事件对象被销毁一旦当当蟒事件对象超出范围,并且一旦当该事件由所述的StateMachine删除,作为documentation说:

状态机作为事件的所有权并在处理后删除它。

如果StateMachine占用了该事件的所有权,则不需要保留引用。

这将是最好的文件bug report

相同的代码不会与PyQt4一起崩溃。