6

アプリケーションに が割り当てられたQPlainTextEditウィジェットがあります。QSyntaxHighlighterそのテキスト編集領域内のコンテンツが変更されるたびに、通知を受け取る必要があります (グローバル アプリケーションの保存/変更状態を更新するため)。ただし、textChanged()ハイライターが機能するたびに信号も放出されるため、何らかの方法でフィルター処理する必要があります。

私はすでに を見ましたmodificationChanged()が、それもうまくいかないようです。強調表示の変更を無視し、最初のコンテンツの変更については正常に通知しますが、その後の変更については通知しません。ドキュメントには、内部状態をリセットできるはずだと書かれていますが、そのsetModified(false)方法は存在しないようです。

変更をフィルタリングする方法についてのアイデアはありますか?

シンタックスハイライトの変更を無視すると言わQTextDocumentれているシングルがあるように見えるものcontentsChanged()に切り替える必要がありますか?

4

3 に答える 3

1

私はそれをテストしていません。基本的にはアイデアです。

ユーザーがテキストを変更すると、それはQKeyEventになります。
蛍光ペンがそうするとき、それはある種のQInputMethodEvent (?)

できることは、イベントが QKeyEvent であるかどうかを確認し、そうでない場合はブロックすることです。

filterobject クラスを作成するか、QTextEdit を含むクラスで次のメソッドを定義するだけです。

bool MyClass::eventFilter(QObject *o, QEvent *e)
{
    if (e->type() == QKeyEvent) //The user modified the text edit
        return false;
    else
        return true;
}

また、QTextEdit を含むクラスで定義した場合は、(コンストラクターなどで) インストールする必要があります。

myTextEdit->installEventFilter(this);
于 2014-03-29T12:41:20.277 に答える
-1

modificationChanged() にフックして、変更済みフラグを毎回リセットする代わりに、textChanged() にフックすることができます。以前に変更されたかどうかに関係なく、ドキュメントに変更を加えるたびにトリガーされます...

于 2014-07-15T13:55:35.900 に答える