2011-04-27 37 views
4

我有一個網格,繼承QTableView與我的自定義模型設置爲視圖。我還創建了用於在表格單元格中編輯項目的代表。他們都工作正常(至少根據我的要求)。如何在QTableView的默認視圖中顯示超文本?

但我的問題是,當小區內的用戶點擊,如果該項目的委託是我們說的QTextEdit(可富文本處理)和用戶粘貼一些文本(從MSWORD複製與文本樣式信息)在texteditbox。此時,只要代理人在那裏,它就會正確顯示文本(表示粗體,斜體,字體大小等),但是在將數據設置爲模型並更新視圖後,默認視圖不會顯示樣式信息。它顯示簡單的HTML文本(如果我設置模型數據,當代理的插槽dataChanged被調用,我從委託獲取HTML)。

我希望tableview的默認視圖來處理HTML並根據其樣式顯示文本。

任何人有任何想法如何處理?提前致謝! 我正在使用QT版本4.1.4(我知道它的舊版本,但它的項目需求)

回答

2

默認情況下,顯示的編輯器與該特定列的類型(例如int,double,QDateTime)相關聯。該編輯器由分配給視圖的委託人控制。特別是,看看它的createEditor()setEditorData()函數。

您的模型很可能使用了QString類型,並將該字符串傳遞給QTextEdit,該QTextEdit會自動檢查它是否包含HTML文本,因爲它確實將其顯示爲HTML。但是,標準代表不檢查文字。

如果您想在不處於編輯模式時更改視圖,則需要能夠顯示富文本的代表。 Here's another stack overflow answer that gives details on the delegate

0

委託使用QTextEdit對象允許用戶編輯文本,該對象可以處理HTML和/或richtext等。如果視圖沒有正確顯示,則意味着您正在使用的委託不能處理這種形式的數據。 恐怕你將不得不重寫你的代理虛擬drawDisplay()方法,以便能夠以相同的方式顯示數據QTextEdit可以。