C++ (Qt)#include <QtGui/QTextEdit> class AbstractFileModel; class AbstractFileView : public QTextEdit{ Q_OBJECT public: AbstractFileView(QWidget *parent = 0); virtual ~AbstractFileView() = 0; protected: void keyPressEvent(QKeyEvent *keyEvent); void insertFromMimeData(const QMimeData *source); signals: void textEdited(); }; // *** and realization *** AbstractFileView::AbstractFileView(QWidget *parent) : QTextEdit(parent){} AbstractFileView::~AbstractFileView(){} void AbstractFileView::insertFromMimeData(const QMimeData *source){ if (canInsertFromMimeData(source)) { QTextEdit::insertFromMimeData(source); emit textEdited(); }} void AbstractFileView::keyPressEvent(QKeyEvent *keyEvent){ if (keyEvent->key() == Qt::Key_V ) { if (keyEvent->modifiers() == Qt::ControlModifier) { QTextEdit::keyPressEvent(keyEvent); return; } } QTextEdit::keyPressEvent(keyEvent); switch (keyEvent->key()) { case Qt::Key_Control: case Qt::Key_Shift: case Qt::Key_Alt: case Qt::Key_AltGr: case Qt::Key_Meta: return; default: { if (keyEvent->modifiers() == Qt::ControlModifier) return; emit textEdited(); } } }
C++ (Qt)connect(ui.textEdit->document(), SIGNAL(textChanged()), SLOT(modifiedByUser()));
C++ (Qt)void TextEdit::modifiedByUser(){ if (ui.textEdit->document()->isModified()) qDebug() << "Modified by user"; else qDebug() << "Modified by program";}
If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it).
C++ (Qt)void MySetText( QEditText & eText, const QString & str ){ eText.blockSignals(true); eText.setText(str); eText.blockSignals(false);}
C++ (Qt)void MyEditText::DoSetText( const QString & str ){ mFlagSetText = true; setText(str); mFlagSetText = false;}