I'm trying to use QTextBlockUserData to hold info about blocks, but am seeing some strange behavior.  I know there was a related issue posted in March (<a href="http://www.riverbankcomputing.com/pipermail/pyqt/2013-March/032457.html">http://www.riverbankcomputing.com/pipermail/pyqt/2013-March/032457.html</a>) but I'm not sure if what I'm seeing is related.  Here are two cases:<br>
1. Run the below script as is will hold onto the userData only for a short period.  After setFirstBlock is called and it goes back into main, the block no longer has userData with value.  <br>2. Comment out "line set A" and uncomment "line set B".  Now userData holds onto the value even after the button is pressed.  This is the same code so something else is going on.<br>
<br>Also, are we expected to be able to subclass QTextBlockUserData in order to add custom methods (suggested in the documentation)?  I am not seeing this work either as they always come back as QTextClockUserData rather than my subclass.<br>
<br>My versions are:<br>('Qt version:', '4.8.2')<br>('SIP version:', '4.15-snapshot-972540270afa')<br>('PyQt version:', '4.10.3-snapshot-05a01eef7a2e')<br><br>Thank you.<br>
<br><br>from PyQt4.QtGui import QPlainTextEdit, QPushButton, QVBoxLayout, QTextBlockUserData,\<br>                        QApplication, QDialog<br><br>class Edit(QPlainTextEdit):<br>    def __init__(self):<br>        super(Edit, self).__init__()<br>
        <br>    def testBlockData(self):<br>        print self.document().firstBlock().userData().value<br>    <br>    def setFirstBlock(self):<br>        userData = QTextBlockUserData()<br>        userData.value = 5<br>        self.document().firstBlock().setUserData(userData)<br>
        self.testBlockData() # This will print 5, but it is lost immediately<br>    <br>def main():<br>   <br>    app     = QApplication([])<br>    dialog  = QDialog()<br>    <br>    editBox        = Edit()<br>## (line set A) Running this line doesn't hold onto the value<br>
    editBox.setFirstBlock()<br>    editBox.testBlockData()<br>    <br># (line set B) Running the 3 lines below does hold onto the value<br>#    userData = QTextBlockUserData()<br>#    userData.value = 5<br>#    editBox.document().firstBlock().setUserData(userData)<br>
    <br>    button  = QPushButton('Test')<br>    button.clicked.connect(editBox.testBlockData)<br>    <br>    layout  = QVBoxLayout()<br>    layout.addWidget(editBox)<br>    layout.addWidget(button)<br>    <br>    dialog.setLayout(layout)<br>
    dialog.show()<br>    <br>    app.exec_()<br>    <br>if __name__=="__main__":<br>    main()<br>    <br>