QTextEdit: как я могу изменить текст, вставляемый в редактор? - PullRequest
0 голосов
/ 09 декабря 2018

Когда пользователь вставляет текст в виджет QTextEdit , я хочу заменить символы табуляции пробелами.Я надеялся, что будет сигнал наподобие onPaste (QString &), но, похоже, ничего подобного нет.Это возможно?

1 Ответ

0 голосов
/ 09 декабря 2018

Благодаря комментарию LogicStuff я смог сам разобраться, создав новый класс, производный от QTextEdit.

editor.hpp:

#pragma once
#include <QTextEdit>

class Editor : public QTextEdit
{
    Q_OBJECT

public:
    Editor(QWidget * parent) : QTextEdit(parent) {}

    void insertFromMimeData(const QMimeData * source) override;

private:
    static const int TAB_SPACES = 4;
};

editor.cpp:

#include "editor.hpp"
#include <QMimeData>

void Editor::insertFromMimeData(const QMimeData * source)
{
    if (source->hasText())
    {
        QString text = source->text();
        QTextCursor cursor = textCursor();

        for (int x = 0, pos = cursor.positionInBlock(); x < text.size(); x++, pos++)
        {
            if (text[x] == '\t')
            {
                text[x] = ' ';
                for (int spaces = TAB_SPACES - (pos % TAB_SPACES) - 1; spaces > 0; spaces--)
                    text.insert(x, ' ');
            }
            else if (text[x] == '\n')
            {
                pos = -1;
            }
        }
        cursor.insertText(text);
    }
}
...