4

インスタンスの選択したテキストに下線を引くボタンを作成しようとしていQTextEditます。

コンストラクターでは、カーソルをアクティブにして、後で使用する setFontUnderline メソッドの bool 変数を設定しています。

QTextCursor cursor1 = ui.myQTextfield->textCursor();
ui.myQTextfield->ensureCursorVisible();
test1 = false;

以下の最初のメソッドは下線ボタンを押すことで実行され、2 つ目は下線ボタンを離すことで実行されます。

void Hauptfenster::pressed_underlinebutton()
{
    test1 = true;
    ui.myQTextfield->setFontUnderline(test1);   
}

void Hauptfenster::released_underlinebutton()
{
    cursor.clearSelection();
    test1 = false;
    ui.myQTextfield->setFontUnderline(test1);
}

問題は、このコードでは、選択されたテキストが最初に pressed_underlinebutton() メソッドによって下線が引かれ、次にreleased_underlinebutton メソッドで即座に下線が引かれることです。

release_underlinebutton() メソッドを使用して、setfontunderline(false) を再度設定している間、下線を引く選択がなくなったことをアーカイブしたいと思います。

4

1 に答える 1

2

QTextCursor コピーの使用

ドキュメントにはもう少し読む必要があります。

QTextCursor QTextEdit:: textCursor() const

現在表示されているカーソルを表す QTextCursor のコピーを返します。返されたカーソルの変更は QTextEdit のカーソルに影響しないことに注意してください。setTextCursor() を使用して、可視カーソルを更新します。

コピーを取得すると書かれているため、テキストカーソル機能を変更しようとすると、元ではなくコピーを操作しています。

したがって、変更をテキスト エディット コントロールで有効にする場合は、次のようにテキスト カーソルを元に戻す必要があることを確認する必要があります。

cursor.clearSelection();
ui.myQTextfield->setTextCursor(cursor); // \o/

QTextEditのカーソルを直接移動

ただし、この問題を解決する別の方法があります。

QTextCursor::Left   9   Move left one character.
QTextCursor::End    11  Move to the end of the document.

したがって、次のように書くことになります。

ui.myQTextfield->moveCursor(QTextCursor::End)
ui.myQTextfield->moveCursor(QTextCursor::Left)
于 2014-12-25T18:53:45.430 に答える