参考にしたサイト
(本家)レクトを描画できた例
日本語での説明
リファレンスの実行手順
PySide Documentation QTextObjectInterface
の導入方法をまねしました。
1.まずTypeを決定。(UserObjectと同値かそれ以上)
2.QTextCharFormat.setObjectType()の引数に1をセット
3.QTextObjectInterfaceを導入
4.1で決定したタイプと同じタイプと、3のインスタンスを、
QAbstractTextDocumentLayout.registerHandler()
に登録。
5.QChar.ObjectReplacementCharacter(PySideではu"\uFFFC"を、上記charFormatで挿入。
 このReplacementCharacterと衝突するたびにdrawObjectIntrinsicSizeが呼び出されると書いてありました。

試作コード

from PySide import QtGui
from PySide import QtCore
import sys

class MainWindow(QtGui.QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent=None)
        try:
            self.textedit = TextEdit()  
            self.setGeometry(200,200,500,500)           
            self.setCentralWidget(self.textedit)
        except Exception as e:
            print(54,e)
class TextEdit(QtGui.QTextEdit):
    def __init__(self,parent=None):
        super(TextEdit,self).__init__(parent=None)
        self.setParent(parent)
        try:
            self.example_charFormat = QtGui.QTextCharFormat()
            self.example_charFormat.setObjectType(QtGui.QTextFormat.UserObject+1)
            self.example_charFormat.setProperty(1,"どうすればいいんだ?")    
            self.fm = TextObjectInterface(self)
            self.document().documentLayout().registerHandler(self.example_charFormat.objectType(),self.fm)                     
        except Exception as e:
            print(106,e)
    def keyPressEvent(self,event):
        try:
            if event.key() == QtCore.Qt.Key_At:                
                tc = self.textCursor()
                char = self.example_charFormat
                char.setBackground(QtCore.Qt.green)
                tc.insertText("\uFFFC",char)
                return
            return QtGui.QTextEdit.keyPressEvent(self,event)
        except Exception as e:
            print(65,e)        
class TextObjectInterface(QtCore.QObject, QtGui.QTextObjectInterface):
    def __init__(self,parent=None):
        super(TextObjectInterface, self).__init__(parent=None)        
    def intrinsicSize(self,doc, posInDocument, charformat):  
        try:            
            print(43)
            tf = charformat
            s = str(charformat.property(1))       
            fn = tf.font()
            fm = QtGui.QFontMetrics(fn)
            return fm.boundingRect(s).size()
        except Exception as e:
            print(33,e)                        
    def drawObject(self,painter,rect,doc,posInDocument,charformat):
        try:            
            print(47)
            s = str(charformat.property(1))
            painter.drawText(rect,s)
            painter.drawRect(rect)       
        except Exception as e:
            print(24,e)      
def main():
    try:
        QtGui.QApplication([])
    except Exception as e:
        print(65,e)    
    textediter = MainWindow()
    textediter.show()
    sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
    main()

しかし、これではインターフェース自体呼び出されませんでした。
PySideで上記のコードが動く方法はあるのでしょうか?どこが間違っているのでしょうか。