テキストを表示するQTextEdit
ボックスがあり、同じQTextEdit
ボックス内の異なる行のテキストにテキストの色を設定できるようにしたいと思います。 (つまり、1行目は赤、2行目は黒、など)
これはQTextEdit
ボックスで可能ですか?そうでない場合、この動作を取得する最も簡単な方法は何ですか?
ありがとう。
HTMLとしてフォーマットされたテキストを使用します。例:
textEdit->setHtml(text);
ここで、textは、HTML形式のテキストで、色付きの線などが含まれています。
[〜#〜] only [〜#〜]私のために働いたのは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);
簡単な追加:HTMLを自分で生成する代わりに、プログラムでテキストボックスにデータを入力する場合は、textEdit->setTextColor(QColor&)
を使用します。 QColorオブジェクトを自分で作成するか、Qt名前空間で定義済みの色(Qt :: black、Qt :: redなど)のいずれかを使用できます。別のテキストで再度呼び出されるまで、追加したテキストに指定された色を適用します。
いくつかの引用:
QTextEditは、HTMLスタイルのタグを使用したリッチテキスト形式をサポートする高度なWYSIWYGビューアー/エディターです。大きなドキュメントを処理し、ユーザー入力にすばやく応答するように最適化されています。
。
テキスト編集では、プレーンテキストとHTMLファイル(HTML 3.2および4のサブセット)の両方を読み込むことができます。
。
QTextEditは、テーブルや画像を含む大きなHTMLサブセットを表示できます。
これは主に非推奨のタグを意味するため、現在のCSSは含まれていないため、次のようになりました。
// 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 );
拡張 https://stackoverflow.com/a/13287446/1619432 :
QTextEdit::append()
は、前に設定されたFontWeight/TextColorで新しい段落を挿入します。 insertHTML()
またはInsertPlainText()
は、新しい段落の挿入を回避します(たとえば、1行でさまざまな形式を実現するため)。フォント/色の設定は考慮されません。
代わりに 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!" );
...
これは、QTextEditを使用した非常に簡単なエラーログのソリューションです。
// In some common header file
enum class ReportLevel {
Info,
Warning,
Error
};
// Signal in classes who report something
void reportStatus(ReportLevel level,
const QString& tag,
const QString& report);
// Slot in the class which receives the reports
void MyGreatClass::handleStatusReport(ReportLevel level,
const QString& tag,
const QString& report)
{
switch(level) {
case ReportLevel::Info:
mTeReports->setTextColor(Qt::blue);
break;
case ReportLevel::Warning:
mTeReports->setTextColor(QColor::fromRgb(255, 165, 0)); // Orange
break;
case ReportLevel::Error:
mTeReports->setTextColor(Qt::red);
break;
}
// mTeReoports is just an instance of QTextEdit
mTeReports->insertPlainText(tag + "\t");
mTeReports->setTextColor(Qt::black); // set color back to black
// might want ot use #ifdef for windows or linux....
mTeReports->insertPlainText(report + "\r\n");
// Force the scroll bar (if visible) to jump to bottom
mTeReports->ensureCursorVisible();
}
これはどのように見えるかです:
もちろん、先に進んで日付/時刻などのクールなものを追加できます:)