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.

26
demandé sur fat 2010-05-18 17:53:18

5 réponses

Utilisez du texte formaté en HTML, par exemple:

textEdit->setHtml(text);

texte, est un texte formaté HTML, contient des lignes colorées et etc.

24
répondu mosg 2010-05-18 14:04:01

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);
30
répondu paie 2011-08-03 22:52:31

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.

26
répondu badgerr 2010-05-18 15:05:12

Lien vers la doc

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 );
10
répondu none 2012-11-08 11:02:28

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!" );
...
8
répondu handle 2017-05-23 12:16:48