![IscanderChe](/media/cache/c6/bd/c6bd48d511a45551f81980d558b60c04.webp)
IscanderChe8 декабря 2023 г. 6:20
Побуквенное сравнение двух строк
Добрый день всем.
Разрабатываю клавиатурный тренажёр.
Для того, чтобы выделить ошибки в набираемом тексте, я привязался к сигналу QTextEdit void textChanged(). Если строка уменьшается, то всё нормально. Если же увеличивается "неправильным" символом, то программа зацикливается на слоте, соединённым с указанным сигналом.
Вот код:
Widget::Widget(QWidget *parent) : QWidget(parent) { m_document = new QTextDocument(); m_textEdit = new QTextEdit(this); ... m_textEdit_2 = new QTextEdit(this); m_document = m_textEdit->document(); m_document->setPlainText("abcdefghijklmnopqrstuvwxyz"); m_document = m_textEdit_2->document(); m_document->setPlainText("abcdefghijklmnopqrstuvwxyz"); ... connect(m_textEdit, &QTextEdit::textChanged, this, &Widget::slotTextChanged); } void Widget::slotTextChanged() { QString line_1 = m_textEdit->toPlainText(); // здесь текст редактируется QString line_2 = m_textEdit_2->toPlainText(); // здесь лежит эталонная строка QVector<int> errors; if(line_1 != line_2) { for(int i = 0; i < line_1.size(); ++i) { QChar c_1 = line_1.at(i); QChar c_2 = line_2.at(i); if(c_1 != c_2) { errors.push_back(i); } } } QTextCursor cursor(m_textEdit->document()); cursor.setCharFormat(oldFmt); QTextCharFormat fmt; fmt.setBackground(Qt::blue); for(int i = 0; i < errors.size(); ++i) { int begin = errors.at(i) - 1; int end = errors.at(i); cursor.setPosition(begin, QTextCursor::MoveAnchor); cursor.setPosition(end, QTextCursor::KeepAnchor); cursor.setCharFormat(fmt); } }
![Рекомендуем хостинг TIMEWEB](/media/technical_storage/timeweb-120-90.jpg)
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Последние комментарии
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5 февраля 2024 г. 1:50
![EVA](/media/cache/4b/62/4b6257bdb5dfaf404a6571a1ba7910ef.webp)
EVA25 декабря 2023 г. 10:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Сейчас обсуждают на форуме
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
![BlinCT](/media/cache/ae/4a/ae4a65663ccbf14aec7b31a6df3f29a6.webp)
BlinCT25 июня 2024 г. 1:00
![Evgenii Legotckoi](/media/cache/5a/49/5a499b0c8eb5e79957fec0aea35e5d98.webp)
Evgenii Legotckoi24 июня 2024 г. 15:11
![BlinCT](/media/cache/ae/4a/ae4a65663ccbf14aec7b31a6df3f29a6.webp)
BlinCT5 мая 2024 г. 5:46
![Evgenii Legotckoi](/media/cache/5a/49/5a499b0c8eb5e79957fec0aea35e5d98.webp)
Evgenii Legotckoi2 мая 2024 г. 14:07
Добрый день.
Там случайно не высылается этот сигнал textChanged ещё и при форматировани текста?
Если решиать в лоб, то можно просто отключать сигнал/слотовое соединение внутри слота и подключать обратно в конце слота