如何在QTableView的默认视图中显示超文本?

时间:2011-04-27 06:50:14

标签: c++ qt qt4

我有一个网格,它继承了我的自定义模型集的QTableView视图。我还创建了用于编辑表格单元格中的项目的委托。他们都工作得很好(至少按照我的要求)。

但我的问题是,当用户在单元格内部单击时,如果该项目的委托是让我们说QTextEdit(可以处理richtext)并且用户粘贴一些文本(从MSWORD复制带有文本的样式信息)在texteditbox中。此时它只显示正确的文本(表示粗体,斜体,字体大小等),但只要委托在那里,但在将数据设置为模型并更新视图后,默认视图不会显示样式信息。它显示了纯HTML文本(如果我在调用委托的插槽dataChanged并从委托中获取html时设置模型数据)。

我希望tableview的默认视图处理HTML并根据其样式显示文本。

任何人都知道如何处理?提前致谢! 我正在使用QT版本4.1.4(我知道它的旧版,但它的项目需求)

2 个答案:

答案 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的方式显示数据。