QTextEdit avec différentes couleurs de texte (Qt / C++)
j'ai un QTextEdit
boîte qui affiche le texte, et j'aimerais pouvoir définir la couleur du texte pour différentes lignes de texte dans le même QTextEdit
boîte. (c.-à-d. que la ligne 1 peut être rouge, la ligne 2 peut être noire, etc.)
Est-ce possible dans un QTextEdit
boîte? Si non, Quelle est la meilleure façon d'obtenir ce comportement?
Merci.
5 réponses
Utilisez du texte formaté en HTML, par exemple:
textEdit->setHtml(text);
où texte, est un texte formaté HTML, contient des lignes colorées et etc.
chose qui a fonctionné pour moi était html.
extrait de Code qui suit.
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);
juste un ajout rapide: une alternative à la génération du html vous - même, si vous peuplez la zone de texte programmatiquement, est d'utiliser textEdit->setTextColor(QColor&)
. Vous pouvez créer L'objet QColor vous-même, ou utiliser l'une des couleurs prédéfinies dans L'Espace-nom Qt (Qt::black, Qt::red, etc.). Il appliquera la couleur spécifique à un texte que vous ajoutez, jusqu'à ce qu'il est appelé à nouveau avec un autre.
quelques citations:
QTextEdit est un visualiseur/éditeur WYSIWYG avancé supportant le formatage de texte riche en utilisant Étiquettes de style HTML. Il est optimisé pour traiter de grands documents et pour répondre rapidement à la saisie de l'utilisateur.
.
L'édition de texte peut charger à la fois simple des fichiers HTML et texte (un sous-ensemble de HTML 3.2 et 4).
.
QTextEdit can afficher un grand sous-ensemble HTML, y compris les tableaux et les images.
cela signifie principalement des tags dépréciés et en tant que tel n'inclut pas de CSS courant, donc je me suis tourné vers ceci:
// 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 );
Extension https://stackoverflow.com/a/13287446/1619432:
QTextEdit::append()
insère un nouveau paragraphe avec FontWeight / TextColor précédemment défini.
insertHTML()
ou InsertPlainText()
pour éviter d'insérer un nouveau paragraphe (par exemple pour obtenir différents formats dans une seule ligne) ne respectent pas les paramètres de police/couleur.
utilisez plutôt 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!" );
...