У меня есть QTextEdit
, и я подключил слот textChanged()
к сигналу. Как я могу найти изменения, когда сигнал испускается. Например, я хочу сохранить позицию курсора и написанный символ, когда я что-то пишу.
Получить изменения QTextEdit при испускании сигнала textChanged()
Ответы (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
Я ожидаю, что курсор относится к текстовому курсору, который также можно прочитать из объекта textEdit.
- person Frank Osterfeld; 28.01.2013