Russian Qt Forum
Октябрь 03, 2024, 03:30
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Ключевые слова С++
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Ключевые слова С++ (Прочитано 7710 раз)
pablo
Гость
Ключевые слова С++
«
:
Февраль 11, 2005, 11:28 »
Смотрите В QTextEdit написана самая примитивная прога на с++.
Короче проблема такая: Как мне используя QTextEdit другим цветом закрасить ключевые слова с++.
Может вы могли бы предложит какой нибудь способ достигнуть етого.
Заранее благодарю.
Записан
RamsesIII
Гость
Ключевые слова С++
«
Ответ #1 :
Февраль 11, 2005, 11:35 »
Ispolsui class QSyntaxHighlighter
Записан
Sergeich
Гость
Ключевые слова С++
«
Ответ #2 :
Февраль 11, 2005, 11:38 »
Ищешь в тексте нужные слова и окружаешь тэгами
<font color="#5500ff">keyword</font>
Записан
pablo
Гость
Ключевые слова С++
«
Ответ #3 :
Февраль 11, 2005, 13:51 »
А как именно искать ?
Если функцией find(), то чёто она мне ничего никогда не находит.
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1988
Ключевые слова С++
«
Ответ #4 :
Февраль 11, 2005, 14:10 »
используй
QRegExp
The QRegExp class provides pattern matching using regular expressions. More...
Записан
pablo
Гость
Ключевые слова С++
«
Ответ #5 :
Февраль 11, 2005, 15:02 »
Допустим я использую QRegExp как я понял из документации, то етот класс изобилует функциями поиска в строке, но мне надо не только найти слова, но и их закрасить другим цветом. Разве этот класс предлогает такую возможность, если да то какой его метод ?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Ключевые слова С++
«
Ответ #6 :
Февраль 11, 2005, 15:04 »
да не советовал бы. эта штука и глючная, и тормознутая...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
pablo
Гость
Ключевые слова С++
«
Ответ #7 :
Февраль 11, 2005, 19:55 »
Ну я поискал в документации и нашёл там класс QSyntaxHighlighter, он обеспечивает какраз то, что надо. Только проблема вот в чем :
Там сказано переопределить функцию highlightParagraph(), но как это делается там не написали. Может кто знает как это делается
Записан
developer
Гость
Re: Ключевые слова С++
«
Ответ #8 :
Декабрь 26, 2007, 13:26 »
Я сделал ето так:
---------------------------------------------
highlighter.h
----------------------------------------------
class Highlighter : public QSyntaxHighlighter
{
Q_OBJECT
public:
Highlighter(QTextEdit *parent = 0);
protected:
void highlightBlock(const QString &text);
private:
struct HighlightingRule
{
QRegExp pattern;
QTextCharFormat format;
};
QVector<HighlightingRule> highlightingRules;
QRegExp commentStartExpression;
QRegExp commentEndExpression;
QTextCharFormat keywordFormat;
QTextCharFormat quotationFormat;
QTextCharFormat singleLineCommentFormat;
QTextCharFormat multiLineCommentFormat;
};
//=========================
highlighter.cpp
//========================
Highlighter::Highlighter(QTextEdit *parent)
: QSyntaxHighlighter(parent)
{
HighlightingRule rule;
keywordFormat.setForeground(Qt::red);
keywordFormat.setFontWeight(QFont::Bold);
QStringList keywordPatterns;
keywordPatterns << "\\babs\\b"<<"\\babsolute\\b"<<"\\baccess\\b"<<"\\bacos\\b"<<"\\badd\\b"<<"\\badd_months\\b"
<<"\\badddate\\b"<<"\\badmin\\b"<<"\\bafter\\b"<<"\\baggregate\\b"<<"\\ball\\b"<<"\\ballocate\\b"<<"\\balter\\b"<<"\\band\\b"
<<"\\bany\\b"<<"\\bapp_name\\b"<<"\\bare\\b"<<"\\barray\\b"<<"\\bas\\b"<<"\\basc\\b"<<"\\bascii\\b"<<"\\basin\\b"<<"\\bassertion\\b"
/*здесь пишем свои ключевие слова*/
foreach (QString pattern, keywordPatterns) {// foreach зарезервированное слово QT
rule.pattern = QRegExp(pattern); //для каждого ключевого слова создаем свой формат
rule.format = keywordFormat;
highlightingRules.append(rule);
}
singleLineCommentFormat.setForeground(Qt::red);
rule.pattern = QRegExp("//[^\n]*");
rule.format = singleLineCommentFormat;
highlightingRules.append(rule);
quotationFormat.setForeground(Qt::green);
rule.pattern = QRegExp("\".*\"");
rule.format = quotationFormat;
highlightingRules.append(rule);
multiLineCommentFormat.setForeground(Qt::blue);
commentStartExpression = QRegExp("/\\*");
commentEndExpression = QRegExp("\\*/");
// задаем цвета для каждой групы ключевых слов, скобок и т.д.
}
void Highlighter::highlightBlock(const QString &text)
{
/*переопределяем функцию highlightBlock*/
foreach (HighlightingRule rule, highlightingRules) {
rule.pattern.setCaseSensitivity(Qt::CaseInsensitive);
QRegExp expression(rule.pattern);
int index = text.indexOf(expression);
while (index >= 0) {
int length = expression.matchedLength();
setFormat(index, length, rule.format);
index = text.indexOf(expression, index + length);
}
}
setCurrentBlockState(0);
int startIndex = 0;
if (previousBlockState() != 1)
startIndex = text.indexOf(commentStartExpression);
while (startIndex >= 0) {
int endIndex = text.indexOf(commentEndExpression, startIndex);
int commentLength;
if (endIndex == -1) {
setCurrentBlockState(1);
commentLength = text.length() - startIndex;
} else {
commentLength = endIndex - startIndex
+ commentEndExpression.matchedLength();
}
setFormat(startIndex, commentLength, multiLineCommentFormat);
startIndex = text.indexOf(commentStartExpression,
startIndex + commentLength);
}
}
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...