IscanderChe
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
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

1
Evgenii Legotckoi
  • 12 декабря 2023 г. 6:48

Добрый день.
Там случайно не высылается этот сигнал textChanged ещё и при форматировани текста?
Если решиать в лоб, то можно просто отключать сигнал/слотовое соединение внутри слота и подключать обратно в конце слота

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    ОК

    Qt - Тест 001. Сигналы и слоты

    • Результат:47баллов,
    • Очки рейтинга-6
    A
    • Alena
    • 19 января 2025 г. 22:41

    C++ - Тест 005. Структуры и Классы

    • Результат:58баллов,
    • Очки рейтинга-2
    OI
    • Ora Iro
    • 24 декабря 2024 г. 17:38

    C++ - Тест 001. Первая программа и типы данных

    • Результат:40баллов,
    • Очки рейтинга-8
    Последние комментарии
    ИМ
    Игорь Максимов22 ноября 2024 г. 22:51
    Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    Evgenii Legotckoi
    Evgenii Legotckoi1 ноября 2024 г. 0:37
    Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
    A
    ALO1ZE19 октября 2024 г. 18:19
    Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь Максимов5 октября 2024 г. 17:51
    Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas55 июля 2024 г. 21:02
    QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    Сейчас обсуждают на форуме
    n
    nkly3 января 2025 г. 13:52
    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
    M
    Marsel17 августа 2023 г. 0:26
    OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
    Evgenii Legotckoi
    Evgenii Legotckoi25 июня 2024 г. 1:11
    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
    t
    tonypeachey115 ноября 2024 г. 17:04
    google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
    NSProject
    NSProject4 июня 2022 г. 13:49
    Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

    Следите за нами в социальных сетях