⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qsyntaxhighlighter.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*!    Constructs a QSyntaxHighlighter and installs it on \a parent 's    QTextDocument. The specified QTextEdit also becomes the owner of    the QSyntaxHighlighter.*/QSyntaxHighlighter::QSyntaxHighlighter(QTextEdit *parent)    : QObject(*new QSyntaxHighlighterPrivate, parent){    setDocument(parent->document());}/*!    Destructor. Uninstalls this syntax highlighter from the text document.*/QSyntaxHighlighter::~QSyntaxHighlighter(){    setDocument(0);}/*!    Installs the syntax highlighter on the given QTextDocument \a doc.    A QSyntaxHighlighter can only be used with one document at a time.*/void QSyntaxHighlighter::setDocument(QTextDocument *doc){    Q_D(QSyntaxHighlighter);    if (d->doc) {        disconnect(d->doc, SIGNAL(contentsChange(int,int,int)),                   this, SLOT(_q_reformatBlocks(int,int,int)));        QTextCursor cursor(d->doc);        cursor.beginEditBlock();        for (QTextBlock blk = d->doc->begin(); blk.isValid(); blk = blk.next())            blk.layout()->clearAdditionalFormats();        cursor.endEditBlock();    }    d->doc = doc;    if (d->doc) {        connect(d->doc, SIGNAL(contentsChange(int,int,int)),                this, SLOT(_q_reformatBlocks(int,int,int)));        QTimer::singleShot(0, this, SLOT(_q_delayedRehighlight()));        d->rehighlightPending = true;    }}/*!    Returns the QTextDocument on which this syntax highlighter is    installed.*/QTextDocument *QSyntaxHighlighter::document() const{    Q_D(const QSyntaxHighlighter);    return d->doc;}/*!    \since 4.2    Redoes the highlighting of the whole document.*/void QSyntaxHighlighter::rehighlight(){    Q_D(QSyntaxHighlighter);    if (!d->doc)        return;    disconnect(d->doc, SIGNAL(contentsChange(int,int,int)),               this, SLOT(_q_reformatBlocks(int,int,int)));    QTextCursor cursor(d->doc);    cursor.beginEditBlock();    cursor.movePosition(QTextCursor::End);    d->_q_reformatBlocks(0, 0, cursor.position());    cursor.endEditBlock();    connect(d->doc, SIGNAL(contentsChange(int,int,int)),            this, SLOT(_q_reformatBlocks(int,int,int)));}/*!    \fn void QSyntaxHighlighter::highlightBlock(const QString &text)    Highlights the given text block. This function is called when    necessary by the rich text engine, i.e. on text blocks which have    changed.    To provide your own syntax highlighting, you must subclass    QSyntaxHighlighter and reimplement highlightBlock(). In your    reimplementation you should parse the block's \a text and call    setFormat() as often as necessary to apply any font and color    changes that you require. For example:    \code        void MyHighlighter::highlightBlock(const QString &text)        {            QTextCharFormat myClassFormat;            myClassFormat.setFontWeight(QFont::Bold);            myClassFormat.setForeground(Qt::darkMagenta);            QString pattern = "\\bMy[A-Za-z]+\\b";            QRegExp expression(pattern);            int index = text.indexOf(expression);            while (index >= 0) {                int length = expression.matchedLength();                setFormat(index, length, myClassFormat);                index = text.indexOf(expression, index + length);             }         }    \endcode    Some syntaxes can have constructs that span several text    blocks. For example, a C++ syntax highlighter should be able to    cope with \c{/}\c{*...*}\c{/} multiline comments. To deal with    these cases it is necessary to know the end state of the previous    text block (e.g. "in comment").    Inside your highlightBlock() implementation you can query the end    state of the previous text block using the previousBlockState()    function. After parsing the block you can save the last state    using setCurrentBlockState().    The currentBlockState() and previousBlockState() functions return    an int value. If no state is set, the returned value is -1. You    can designate any other value to identify any given state using    the setCurrentBlockState() function. Once the state is set the    QTextBlock keeps that value until it is set set again or until the    corresponding paragraph of text gets deleted.    For example, if you're writing a simple C++ syntax highlighter,    you might designate 1 to signify "in comment". For a text block    that ended in the middle of a comment you'd set 1 using    setCurrentBlockState, and for other paragraphs you'd set 0.    In your parsing code if the return value of previousBlockState()    is 1, you would highlight the text as a C++ comment until you    reached the closing \c{*}\c{/}.    \sa previousBlockState(), setFormat(), setCurrentBlockState()*//*!    This function is applied to the syntax highlighter's current text    block (i.e. the text that is passed to the highlightBlock()    function).    The specified \a format is applied to the text from the \a start    position for a length of \a count characters (if \a count is 0,    nothing is done). The formatting properties set in \a format are    merged at display time with the formatting information stored    directly in the document, for example as previously set with    QTextCursor's functions. Note that the document itself remains    unmodified by the format set through this function.    \sa format(), highlightBlock()*/void QSyntaxHighlighter::setFormat(int start, int count, const QTextCharFormat &format){    Q_D(QSyntaxHighlighter);    if (start < 0 || start >= d->formatChanges.count())        return;    const int end = qMin(start + count, d->formatChanges.count());    for (int i = start; i < end; ++i)        d->formatChanges[i] = format;}/*!    \overload    The specified \a color is applied to the current text block from    the \a start position for a length of \a count characters.    The other attributes of the current text block, e.g. the font and    background color, are reset to default values.    \sa format(), highlightBlock()*/void QSyntaxHighlighter::setFormat(int start, int count, const QColor &color){    QTextCharFormat format;    format.setForeground(color);    setFormat(start, count, format);}/*!    \overload    The specified \a font is applied to the current text block from    the \a start position for a length of \a count characters.    The other attributes of the current text block, e.g. the font and    background color, are reset to default values.    \sa format(), highlightBlock()*/void QSyntaxHighlighter::setFormat(int start, int count, const QFont &font){    QTextCharFormat format;    format.setFont(font);    setFormat(start, count, format);}/*!    \fn QTextCharFormat QSyntaxHighlighter::format(int position) const    Returns the format at \a position inside the syntax highlighter's    current text block.*/QTextCharFormat QSyntaxHighlighter::format(int pos) const{    Q_D(const QSyntaxHighlighter);    if (pos < 0 || pos >= d->formatChanges.count())        return QTextCharFormat();    return d->formatChanges.at(pos);}/*!    Returns the end state of the text block previous to the    syntax highlighter's current block. If no value was    previously set, the returned value is -1.    \sa highlightBlock(), setCurrentBlockState()*/int QSyntaxHighlighter::previousBlockState() const{    Q_D(const QSyntaxHighlighter);    if (!d->currentBlock.isValid())        return -1;    const QTextBlock previous = d->currentBlock.previous();    if (!previous.isValid())        return -1;    return previous.userState();}/*!    Returns the state of the current text block. If no value is set,    the returned value is -1.*/int QSyntaxHighlighter::currentBlockState() const{    Q_D(const QSyntaxHighlighter);    if (!d->currentBlock.isValid())        return -1;    return d->currentBlock.userState();}/*!    Sets the state of the current text block to \a newState.    \sa highlightBlock()*/void QSyntaxHighlighter::setCurrentBlockState(int newState){    Q_D(QSyntaxHighlighter);    if (!d->currentBlock.isValid())        return;    d->currentBlock.setUserState(newState);}/*!    Attaches the given \a data to the current text block.  The    ownership is passed to the underlying text document, i.e. the    provided QTextBlockUserData object will be deleted if the    corresponding text block gets deleted.    QTextBlockUserData can be used to store custom settings. In the    case of syntax highlighting, it is in particular interesting as    cache storage for information that you may figure out while    parsing the paragraph's text.    For example while parsing the text, you can keep track of    parenthesis characters that you encounter ('{[(' and the like),    and store their relative position and the actual QChar in a simple    class derived from QTextBlockUserData:    \code        struct ParenthesisInfo        {            QChar char;            int position;        };        struct BlockData : public QTextBlockUserData        {            QVector<ParenthesisInfo> parentheses;        };    \endcode    During cursor navigation in the associated editor, you can ask the    current QTextBlock (retrieved using the QTextCursor::block()    function) if it has a user data object set and cast it to your \c    BlockData object. Then you can check if the current cursor    position matches with a previously recorded parenthesis position,    and, depending on the type of parenthesis (opening or closing),    find the next opening or closing parenthesis on the same level.    In this way you can do a visual parenthesis matching and highlight    from the current cursor position to the matching parenthesis. That    makes it easier to spot a missing parenthesis in your code and to    find where a corresponding opening/closing parenthesis is when    editing parenthesis intensive code.    \sa QTextBlock::setUserData()*/void QSyntaxHighlighter::setCurrentBlockUserData(QTextBlockUserData *data){    Q_D(QSyntaxHighlighter);    if (!d->currentBlock.isValid())        return;    d->currentBlock.setUserData(data);}/*!    Returns the QTextBlockUserData object previously attached to the    current text block.    \sa QTextBlock::userData(), setCurrentBlockUserData()*/QTextBlockUserData *QSyntaxHighlighter::currentBlockUserData() const{    Q_D(const QSyntaxHighlighter);    if (!d->currentBlock.isValid())        return 0;    return d->currentBlock.userData();}#include "moc_qsyntaxhighlighter.cpp"#endif // QT_NO_SYNTAXHIGHLIGHTER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -