web-dev-qa-db-ja.com

異なるテキスト色のQTextEdit(Qt / C ++)

テキストを表示するQTextEditボックスがあり、同じQTextEditボックス内の異なる行のテキストにテキストの色を設定できるようにしたいと思います。 (つまり、1行目は赤、2行目は黒、など)

これはQTextEditボックスで可能ですか?そうでない場合、この動作を取得する最も簡単な方法は何ですか?

ありがとう。

27
user924

HTMLとしてフォーマットされたテキストを使用します。例:

textEdit->setHtml(text);

ここで、textは、HTML形式のテキストで、色付きの線などが含まれています。

24
mosg

[〜#〜] 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);
31
paie

簡単な追加:HTMLを自分で生成する代わりに、プログラムでテキストボックスにデータを入力する場合は、textEdit->setTextColor(QColor&)を使用します。 QColorオブジェクトを自分で作成するか、Qt名前空間で定義済みの色(Qt :: black、Qt :: redなど)のいずれかを使用できます。別のテキストで再度呼び出されるまで、追加したテキストに指定された色を適用します。

27
badgerr

ドキュメントへのリンク

いくつかの引用:

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 );
11
none

拡張 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!" );
...
8
handle

これは、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();
}

これはどのように見えるかです:

enter image description here

もちろん、先に進んで日付/時刻などのクールなものを追加できます:)

0
Saeid Yazdani