我正在寻找在 QStyledItemDelegate 中使用多行文本编辑的干净方法。createEditor 的实现非常简单,返回一个 QTextEdit 实例
def createEditor(self, parent, option, index):
return QtGui.QTextEdit("Some text")
Run Code Online (Sandbox Code Playgroud)
但setModelData
期望派生出一个 Edit WidgetQWidget
作为参数而不是QTextEdits
base QScrollArea
。Qt 文档还告诉我(至少在 PyQt 文档中)该setModelData
函数尝试从 QWidget UserData 字段获取数据。但是,如果没有派生的编辑小部件,QWidget
则无法设置数据。目前它抛出一个,因为它在编辑器上AttributeError
找不到。text()
是否有一些行之有效的方法来使用非 QWidget 编辑器?或者我只是缺少一些小部件来做到这一点?
目前,我通过实例化 aQLineEdit
并将其QTextEdit
传递toPlainText()
给 来快速解决了该问题setModelData
。非常哈克!!我还可以使用鸭子类型并在派生类上实现一个text()
方法QTextEdit
。但这仍然不是一个好方法,不是吗?在 C++ 中有什么方法可以做到这一点?