Работая: как только я введен текст в поле поиска (Searchbox), соответствующий текст в текстовом файле (редактор) должен выделить, что произойдет через класс SearchHighlighter.
Но по какой -то причине это не выделяется. Я проверил с помощью qdebug () , и все работает нормально в функции hightblock () . Но текстовый размер остается одинаковым даже после функции hightblock ().#ifndef SEARCHHIGHLIGHTER_H
#define SEARCHHIGHLIGHTER_H
#include
#include
#include
#include
#include
class SearchHighlighter : public QSyntaxHighlighter {
Q_OBJECT
public:
SearchHighlighter(QTextDocument *parent = nullptr)
: QSyntaxHighlighter(parent) {}
Q_INVOKABLE void setSearchTerm(const QString &term){
searchTerm = term;
rehighlight();
}
Q_INVOKABLE void setDocObj(QQuickTextDocument* textDocObj)
{
qDebug() textDocument();
setDocument(textDocObj->textDocument());
}
protected:
void highlightBlock(const QString &text) override {
if (searchTerm.isEmpty())
return;
QTextCharFormat fmt;
fmt.setForeground(Qt::red);
fmt.setBackground(Qt::yellow);
QRegularExpression re(QRegularExpression::escape(searchTerm),
QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatchIterator i = re.globalMatch(text);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
QSyntaxHighlighter::setFormat(match.capturedStart(), match.capturedLength(), fmt);
}
}
private:
QString searchTerm;
};
#endif // SEARCHHIGHLIGHTER_H
main.cpp
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreated,
&app,
(QObject *obj, const QUrl &objUrl) {
if ... reflecting
QT, QSyntaxHighlighter, по некоторым причинам форматирование, сделанное его, не отражается в Textedit QML ⇐ C++
Программы на C++. Форум разработчиков
1756173872
Anonymous
Работая: как только я введен текст в поле поиска (Searchbox), соответствующий текст в текстовом файле (редактор) должен выделить, что произойдет через класс SearchHighlighter.
Но по какой -то причине это не выделяется. Я проверил с помощью qdebug () , и все работает нормально в функции hightblock () . Но текстовый размер остается одинаковым даже после функции hightblock ().#ifndef SEARCHHIGHLIGHTER_H
#define SEARCHHIGHLIGHTER_H
#include
#include
#include
#include
#include
class SearchHighlighter : public QSyntaxHighlighter {
Q_OBJECT
public:
SearchHighlighter(QTextDocument *parent = nullptr)
: QSyntaxHighlighter(parent) {}
Q_INVOKABLE void setSearchTerm(const QString &term){
searchTerm = term;
rehighlight();
}
Q_INVOKABLE void setDocObj(QQuickTextDocument* textDocObj)
{
qDebug() textDocument();
setDocument(textDocObj->textDocument());
}
protected:
void highlightBlock(const QString &text) override {
if (searchTerm.isEmpty())
return;
QTextCharFormat fmt;
fmt.setForeground(Qt::red);
fmt.setBackground(Qt::yellow);
QRegularExpression re(QRegularExpression::escape(searchTerm),
QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatchIterator i = re.globalMatch(text);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
QSyntaxHighlighter::setFormat(match.capturedStart(), match.capturedLength(), fmt);
}
}
private:
QString searchTerm;
};
#endif // SEARCHHIGHLIGHTER_H
[b] main.cpp[/b]
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreated,
&app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
},
Qt::QueuedConnection);
SearchHighlighter *hl = new SearchHighlighter();
engine.rootContext()->setContextProperty("searchHighlighter", hl);
engine.load(url);
return app.exec();
}
[b] main.qml[/b]
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
ApplicationWindow {
visible: true
width: 600
height: 400
ColumnLayout {
anchors.fill: parent
TextField {
id: searchBox
Layout.leftMargin: 10
Layout.topMargin: 10
placeholderText: "Search..."
onTextChanged: searchHighlighter.setSearchTerm(text)
}
TextEdit {
id: editor
Layout.fillHeight: true
Layout.fillWidth: true
Layout.leftMargin: 10
font.pixelSize: 20
wrapMode: TextEdit.Wrap
Component.onCompleted: {
searchHighlighter.setDocObj(editor.textDocument)
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79746355/qt-qsyntaxhighlighter-for-some-reasons-formatting-done-by-it-is-not-reflecting[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия