我有一个网格,它继承了我的自定义模型集的QTableView视图。我还创建了用于编辑表格单元格中的项目的委托。他们都工作得很好(至少按照我的要求)。
但我的问题是,当用户在单元格内部单击时,如果该项目的委托是让我们说QTextEdit(可以处理richtext)并且用户粘贴一些文本(从MSWORD复制带有文本的样式信息)在texteditbox中。此时它只显示正确的文本(表示粗体,斜体,字体大小等),但只要委托在那里,但在将数据设置为模型并更新视图后,默认视图不会显示样式信息。它显示了纯HTML文本(如果我在调用委托的插槽dataChanged并从委托中获取html时设置模型数据)。
我希望tableview的默认视图处理HTML并根据其样式显示文本。
任何人都知道如何处理?提前致谢! 我正在使用QT版本4.1.4(我知道它的旧版,但它的项目需求)
答案 0 :(得分:2)
默认情况下,显示的编辑器与该特定列的类型相关联(例如int,double,QDateTime)。该编辑器由分配给视图的代理控制。请特别注意其createEditor()和setEditorData()函数。
您的模型可能正在使用QString类型并将该字符串传递给QTextEdit,QTextEdit会自动检查它以查看它是否包含HTML文本,并且因为它确实包含HTML文本。但是,标准代表不会检查文本。
如果要在未处于编辑模式时更改视图,则需要能够显示富文本的委托。 Here's another stack overflow answer that gives details on the delegate
答案 1 :(得分:0)
委托使用QTextEdit
对象允许用户编辑文本,此对象可以处理HTML和/或richtext等。如果视图没有显示正确,则意味着代表你是使用自身无法处理这种形式的数据。
我担心您必须重写代理的虚拟drawDisplay()
方法,才能以QTextEdit
的方式显示数据。