Получить изменения QTextEdit при испускании сигнала textChanged()

У меня есть QTextEdit, и я подключил слот textChanged() к сигналу. Как я могу найти изменения, когда сигнал испускается. Например, я хочу сохранить позицию курсора и написанный символ, когда я что-то пишу.


person John Smith    schedule 28.01.2013    source источник


Ответы (1)


В слоте, который вызывается при испускании сигнала, вы можете получить текст с помощью QString str = textEdit->toplainText();. Также вы можете сохранить предыдущую версию строки и сравнить ее, чтобы получить добавленный символ и его позицию.

Что касается позиции курсора, вы можете использовать класс QTextCurosr, как в этом примере:

файл виджета.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTextEdit>
#include <QTextCursor>
#include <QVBoxLayout>
#include <QLabel>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);

    ~Widget();

private slots:
    void onTextChanged();
    void onCursorPositionChanged();

private:
    QTextCursor m_cursor;
    QVBoxLayout m_layout;
    QTextEdit m_textEdit;
    QLabel m_label;
};

#endif // WIDGET_H

файл виджета.cpp:

#include "widget.h"

#include <QString>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    connect(&m_textEdit, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
    connect(&m_textEdit, SIGNAL(cursorPositionChanged()), this, SLOT(onCursorPositionChanged()));


    m_layout.addWidget(&m_textEdit);
    m_layout.addWidget(&m_label);

    setLayout(&m_layout);
}

Widget::~Widget()
{

}

void Widget::onTextChanged()
{
    // Code that executes on text change here
}

void Widget::onCursorPositionChanged()
{
    // Code that executes on cursor change here
    m_cursor = m_textEdit.textCursor();
    m_label.setText(QString("Position: %1").arg(m_cursor.positionInBlock()));
}

файл main.cpp:

#include <QtGui/QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}
person Jacob Krieg    schedule 28.01.2013
comment
Я ожидаю, что курсор относится к текстовому курсору, который также можно прочитать из объекта textEdit. - person Frank Osterfeld; 28.01.2013