2010-05-18 13 views
23

मेरे पास QTextEdit बॉक्स है जो टेक्स्ट प्रदर्शित करता है, और मैं उसी QTextEdit बॉक्स में टेक्स्ट की विभिन्न पंक्तियों के लिए टेक्स्ट रंग सेट करने में सक्षम होना चाहता हूं। (यानी लाइन 1 लाल हो सकती है, लाइन 2 काला हो सकती है, आदि)QTextEdit विभिन्न टेक्स्ट रंगों (क्यूटी/सी ++)

क्या यह QTextEdit बॉक्स में संभव है? यदि नहीं, तो इस व्यवहार को पाने का सबसे आसान तरीका क्या है?

धन्यवाद।

उत्तर

20

पाठ का प्रयोग करें HTML के रूप में स्वरूपित, उदाहरण के लिए:

textEdit->setHtml(text); 

जहां पाठ, एक एचटीएमएल स्वरूपित पाठ है रंग लाइनों के साथ शामिल है और आदि

23

बस एक त्वरित अलावा: के लिए एक विकल्प एचटीएमएल उत्पन्न करना, अगर आप पाठ बॉक्स को प्रोग्रामेटिक रूप से पॉप्युलेट कर रहे हैं, तो textEdit->setTextColor(QColor&) का उपयोग करना है। आप QColor ऑब्जेक्ट स्वयं बना सकते हैं, या क्यूटी नेमस्पेस (Qt :: Black, Qt :: red, आदि) में पूर्वनिर्धारित रंगों में से एक का उपयोग कर सकते हैं। यह आपके द्वारा जोड़े गए किसी भी पाठ में निर्दिष्ट रंग लागू करेगा, जब तक इसे एक अलग से नहीं कहा जाता है।

+2

यह अब तक सबसे सरल समाधान ऐसा करने के लिए। लॉगिंग के लिए उदाहरण के लिए एक आकर्षण की तरह काम करता है, जहां प्रत्येक पंक्ति संदेश की गंभीरता के अनुसार रंगीन होती है। – SirDarius

+0

लेकिन यह केवल सभी पाठों को रंग देता है, मैं एक रंग रंग के साथ प्रत्येक रंग रंगना चाहता हूं, क्या आप कृपया इसके साथ मेरी मदद कर सकते हैं? –

+1

यदि आप 'textEdit' ऑब्जेक्ट का उपयोग कर रहे हैं, तो यह प्रत्येक 'एपेंड' कॉल के टेक्स्ट को एक अलग रंग के साथ रंग देगा। –

28

केवल मेरे लिए काम करने वाली चीज़ HTML थी।

कोड स्निपेट निम्नानुसार है।

QString line = "contains some text from somewhere ..." 
    : 
    : 
QTextCursor cursor = ui->messages->textCursor(); 
QString alertHtml = "<font color=\"DeepPink\">"; 
QString notifyHtml = "<font color=\"Lime\">"; 
QString infoHtml = "<font color=\"Aqua\">"; 
QString endHtml = "</font><br>"; 

switch(level) 
{ 
    case msg_alert: line = alertHtml % line; break; 
    case msg_notify: line = notifyHtml % line; break; 
    case msg_info: line = infoHtml % line; break; 
    default: line = infoHtml % line; break; 
} 

line = line % endHtml; 
ui->messages->insertHtml(line); 
cursor.movePosition(QTextCursor::End); 
ui->messages->setTextCursor(cursor); 
9

Link to doc

कुछ उद्धरण:

QTextEdit एक उन्नत WYSIWYG दर्शक/संपादक रिच पाठ प्रारूपण समर्थन एचटीएमएल स्टाइल टैग का उपयोग कर रहा है। इसे बड़े दस्तावेज़ों को संभालने और उपयोगकर्ता इनपुट को त्वरित रूप से प्रतिक्रिया देने के लिए अनुकूलित किया गया है।

टेक्स्ट संपादन दोनों सादे पाठ और HTML फ़ाइलों (HTML 3.2 और 4 का सबसेट) लोड कर सकता है।

QTextEdit टेबल और छवियों सहित एक बड़ा HTML सबसेट प्रदर्शित कर सकता है।

यह ज्यादातर पदावनत टैग का मतलब है और इस तरह के रूप में किसी भी वर्तमान सीएसएस शामिल नहीं है, इसलिए मैं इस में बदल गया:

// save  
int fw = ui->textEdit->fontWeight(); 
QColor tc = ui->textEdit->textColor(); 
// append 
ui->textEdit->setFontWeight(QFont::DemiBold); 
ui->textEdit->setTextColor(QColor("red")); 
ui->textEdit->append(entry); 
// restore 
ui->textEdit->setFontWeight(fw); 
ui->textEdit->setTextColor(tc); 
+0

+1 गुणों को सेट करने के लिए +1 और फिर इसे जोड़ने के लिए – Niklas

6

https://stackoverflow.com/a/13287446/1619432 पर विस्तार:

QTextEdit::append() पहले के साथ एक नया पैरा सम्मिलित करता है FontWeight/TextColor सेट करें। insertHTML() या InsertPlainText() एक नया पैराग्राफ डालने से बचने के लिए (उदा। एक पंक्ति में विभिन्न प्रारूपों को प्राप्त करने के लिए) फ़ॉन्ट/रंग सेटिंग्स का सम्मान नहीं करते हैं।

इसके बजाय QTextCursor का उपयोग करें:

... 
// textEdit->moveCursor(QTextCursor::End); 
QTextCursor cursor(textEdit->textCursor()); 

QTextCharFormat format; 
format.setFontWeight(QFont::DemiBold); 
format.setForeground(QBrush(QColor("black"))); 
cursor.setCharFormat(format); 

cursor.insertText("Hello world!"); 
... 
+1

+1 'ìnsertText' – Niklas

+0

के लिए इस उत्तर ने मुझे नई चीजें सिखाईं –

+0

यह मेरे लिए काम कर रहा है। एक पंक्ति एक रंग है, और अगली पंक्ति एक अलग रंग है। इस उदाहरण में, "हैलो वर्ल्ड" के बाद, आप लाइन 'format.setForeground (QBrush (QColor ("white")) डाल देंगे;) और 'कर्सर.सेट खरीफॉर्मेट (प्रारूप);' और 'कर्सर.इनर्टटेक्स्ट (" यह लाइन सफेद है ");'। – orbit

संबंधित मुद्दे