Реклама

Изменение цвета слова в QTextEdit

Qt, QTextEdit, QSyntaxHighLighter

@Kostya9 января 2017 г. 2:08#

Добрый вечер. Подскажите как изменить цвет слова в QTextEdit. Например, весь текст черным, а название компании, красным.

@Arrow9 января 2017 г. 3:57#

Информации о Компания .

Реклама

@Arrow9 января 2017 г. 3:58#ответил @Arrow

Информация о < font color = цвет > Компания < /font>.

@Arrow9 января 2017 г. 3:59#ответил @Arrow

В первом сообщении сайт съел текст :)

@EVILEG9 января 2017 г. 11:08#ответил @Arrow

Всё правильно, что съел. Вставку программного кода следует делать через специальное диалоговое окно, которое вызывается кнопкой с панели редактора комментариев на данном сайте. В противном случае разметка, которая соответствует или похожа на теги html форматирования будет обрабатываться браузером, как обычная гипертекстовая разметка.

Реклама

@EVILEG9 января 2017 г. 11:38#ответил @Kostya

Здесь нужно наследоваться от QSyntaxHighLighter , и делать собственные правила форматирования вводимого текста. После чего в новый класс TextHighLighter необходимо устанавливать документ, который форматируется в QTextEdit .

Например, можно сделать так:

texthighlighter.h

#ifndef TEXTHIGHLIGHTER_H
#define TEXTHIGHLIGHTER_H

#include <QObject>
#include <QSyntaxHighlighter>

QT_BEGIN_NAMESPACE
class QTextDocument;
class QTextCharFormat;
QT_END_NAMESPACE

class TextHighLighter : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    explicit TextHighLighter(QTextDocument *parent = nullptr);

protected:
    void highlightBlock(const QString &text) Q_DECL_OVERRIDE;

signals:

public slots:

private:
    struct HighlightingRule
    {
        QRegExp pattern;
        QTextCharFormat format;
    };
    QVector<HighlightingRule> m_formatRules;

    QTextCharFormat m_format;
};

#endif // TEXTHIGHLIGHTER_H

texthighlighter.cpp

#include "texthighlighter.h"
#include <QTextCharFormat>
#include <QBrush>
#include <QColor>

TextHighLighter::TextHighLighter(QTextDocument *parent) : QSyntaxHighlighter(parent)
{
    HighlightingRule rule;

    QStringList keywordPatterns;
    keywordPatterns << "\\bword\\b" << "\\bwill\\b";

    m_format.setForeground(Qt::red);
    m_format.setFontWeight(QFont::Bold);

    for (const QString &pattern : keywordPatterns) {
        rule.pattern = QRegExp(pattern);
        rule.format = m_format;
        m_formatRules.append(rule);
    }
}

void TextHighLighter::highlightBlock(const QString &text)
{
    for (const HighlightingRule &rule : m_formatRules) {
        QRegExp expression(rule.pattern);
        int index = expression.indexIn(text);
        while (index >= 0) {
            int length = expression.matchedLength();
            setFormat(index, length, rule.format);
            index = expression.indexIn(text, index + length);
        }
    }
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "texthighlighter.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    TextHighLighter* m_highLighter;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_highLighter = new TextHighLighter(ui->textEdit->document());
}

MainWindow::~MainWindow()
{
    delete ui;
}

В данном примере будут подсвечиваться два слова красным жирным шрифтом: will, word

I will check word

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

Реклама