Привет, $username!
UPD: вторая и третья часть цикла о QScintilla.
Сегодня я хочу рассказать вам про отличный проект — QScintilla, который подсвечивает синтаксис кода в Qt-приложениях. Нередко возникает необходимось что-то подсвечивать. Например: C++, Bash, PHP, Diff… Этот список можно продолжать и продолжать. Но вот решение: порт Scintilla на Qt: QScintilla.
В этом посте я расскажу как установить и пользоваться QScintilla в своих приложениях на примере Ubuntu Linux.
Начнем, пожалуй, с самого главного — с установки. Предлагаю собрать QScintilla и установить ее в систему. Для этого скачаем тарбол qscintilla. Распаковываем его в нужную нам папку. Теперь консолька. Выполняем пару нехитрых комманд:
Отличненько. Если вы все сделали правильно, у вас в системе появиться libqscintilla2.so
Ура! Можно начинать кодить. Открывааем криейтор — создаем проект. Теперь добавляем в профайл строчку:
Несложно догадаться что эта строчка подключает QScintilla. Теперь перейдем непосредственно к кодингу проекта. Конструктор mainwindow.cpp:
Не забываем добавить в MainWindow:
Можно смело компилировать — мы видим редактор который подсвечивает C++ код на ура.

Пока это не выглядит очень круто, но это только пока. А теперь начинаеться самое интересное. Предлагаю расширить наш редактор и украсить его. Дописываем в конструктор:
Теперь получаем относительно рабочий редактор, который даже что-то умеет. Конечно у него есть много недостатков, но все они тоже исправимы.

На этом пожалуй, все. Я хотел бы еще рассказать про написание своего лексера, управление поиском и контроль строк, но это слишком много для одной статьи. Но если вы не хотите ждать следущей статьи, читайте документацию и самое главное — эксперементируйте!
Спасибо за внимание, и удачного вам кодинга!
UPD: вторая и третья часть цикла о QScintilla.
Сегодня я хочу рассказать вам про отличный проект — QScintilla, который подсвечивает синтаксис кода в Qt-приложениях. Нередко возникает необходимось что-то подсвечивать. Например: C++, Bash, PHP, Diff… Этот список можно продолжать и продолжать. Но вот решение: порт Scintilla на Qt: QScintilla.
В этом посте я расскажу как установить и пользоваться QScintilla в своих приложениях на примере Ubuntu Linux.
Установка
Начнем, пожалуй, с самого главного — с установки. Предлагаю собрать QScintilla и установить ее в систему. Для этого скачаем тарбол qscintilla. Распаковываем его в нужную нам папку. Теперь консолька. Выполняем пару нехитрых комманд:
cd Qt4 qmake make sudo make install
Отличненько. Если вы все сделали правильно, у вас в системе появиться libqscintilla2.so
Открываем Qt Creator
Ура! Можно начинать кодить. Открывааем криейтор — создаем проект. Теперь добавляем в профайл строчку:
LIBS += -lqscintilla2
Несложно догадаться что эта строчка подключает QScintilla. Теперь перейдем непосредственно к кодингу проекта. Конструктор mainwindow.cpp:
#include <QtGui> #include <Qsci/qsciscintilla.h> #include <Qsci/qscilexercpp.h> #include "mainwindow.h" MainWindow::MainWindow() { textEdit = new QsciScintilla; // инитилизируем редактор textEdit->setUtf8(true); // мы же хотим читать кириллицу setCentralWidget(textEdit); // задаем редактор в ui QsciLexerCPP * lexCpp = new QsciLexerCPP(this); // создаем лексер (схему подсветки) textEdit->setLexer(lexCpp); // задаем С++ лексер нашему редактору }
Не забываем добавить в MainWindow:
private: QSciScintilla *textEdit;
Можно смело компилировать — мы видим редактор который подсвечивает C++ код на ура.

Пока это не выглядит очень круто, но это только пока. А теперь начинаеться самое интересное. Предлагаю расширить наш редактор и украсить его. Дописываем в конструктор:
//! Текущая строка кода и ее подсветка textEdit->setCaretLineVisible(true); textEdit->setCaretLineBackgroundColor(QColor("gainsboro")); //! Выравнивание textEdit->setAutoIndent(true); textEdit->setIndentationGuides(false); textEdit->setIndentationsUseTabs(true); textEdit->setIndentationWidth(4); //! margin это полоска слева, на которой обычно распологаются breakpoints textEdit->setMarginsBackgroundColor(QColor("gainsboro")); textEdit->setMarginLineNumbers(1, true); textEdit->setMarginWidth(1, 50); //! Авто-дополнение кода в зависимости от источника textEdit->setAutoCompletionSource(QsciScintilla::AcsAll); textEdit->setAutoCompletionCaseSensitivity(true); textEdit->setAutoCompletionReplaceWord(true); textEdit->setAutoCompletionUseSingle(QsciScintilla::AcusAlways); textEdit->setAutoCompletionThreshold(0); //! Подсветка соответствий скобок textEdit->setBraceMatching(QsciScintilla::SloppyBraceMatch); textEdit->setMatchedBraceBackgroundColor(Qt::yellow); textEdit->setUnmatchedBraceForegroundColor(Qt::blue);
Теперь получаем относительно рабочий редактор, который даже что-то умеет. Конечно у него есть много недостатков, но все они тоже исправимы.

На этом пожалуй, все. Я хотел бы еще рассказать про написание своего лексера, управление поиском и контроль строк, но это слишком много для одной статьи. Но если вы не хотите ждать следущей статьи, читайте документацию и самое главное — эксперементируйте!
Материалы
- Исходники приложения которого мы с вами написали: qscintilla-demo
- Оффициальная документация qscintilla
Спасибо за внимание, и удачного вам кодинга!
