2012-01-17 70 views
6

我有一個包含富文本的QLabel
我想從QLabel中提取實際(可見)「文本」,而不是用於格式化的代碼。
我基本上需要一個類似於其他Qt Widgets'.toPlainText'方法的函數。從富文本格式的QLabel中獲取純文本

我不能簡單地調用.text()和字符串處理掉HTML標記爲這個線程Get plain text from QString with HTML tags建議,因爲其返回QString包含所有<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">廢話。

如何提取純文本?

(我接受任何方法,即使間接如;即HTML轉換爲純文本預現有功能)

謝謝!

規格:
蟒蛇2.7.2
PyQt4的
Windows 7的

+0

我沒有嘗試過,但它看起來像'QTextCodec'是你需要的(http://developer.qt.nokia.com/doc/qt-4.8/qtextcodec.html上的文檔)。 – TonyK 2012-01-17 07:40:08

+0

RTF似乎不是受支持的編碼(除非我錯過了某些東西)。沒關係,我發現了一個混亂的變通 – 2012-01-17 07:53:10

+0

你不能只是把Qt Rich Text當作html嗎?這裏的Qt文檔(http://doc.qt.nokia.com/4.7-snapshot/qml-text.html)說:「豐富的文本是使用HTML風格的標記定義的。」 – TonyK 2012-01-17 08:26:52

回答

10

使用的啓發QTextDocument做轉換:

doc = QtGui.QTextDocument() 
doc.setHtml(label.text()) 
text = doc.toPlainText() 
+0

哦,是的,比我的方法更直接一點。尷尬我錯過了:| – 2012-01-17 22:19:09

1

這裏是圍繞一個雜亂的工作(對於Python - PyQt的)

def Extract_PlainText(label): 
    Rtf_text = label.text() 
    Temp_Obj = QtGui.QTextEdit() 
    Temp_Obj.setText(Rtf_text) 
    Plain_text = Temp_Obj.toPlainText() 
    del Temp_Obj 
    return Plain_text 

通過http://bytes.com/topic/net/answers/707370-convert-rtf-plain-text

+0

當然'del Temp_Obj'是完全不必要的,但我覺得它很古怪 – 2012-01-17 08:01:06