3

Windows XP で QGraphicsScene を使用して Qt 4.8 アプリケーションを開発しています。ユーザーが QGraphicsTextItem をダブルクリックすると、私は呼び出します

textItem->setTextInteractionFlags(Qt::TextEditorInteraction);

次の選択変更で私は呼び出します

textItem->setTextInteractionFlags(Qt::NoTextInteraction);

これは正しく機能しますが、編集から残っている背景色の反転を削除する方法が見つかりません。以下のスクリーン ショットでは、最初のテキスト項目をダブルクリックし、「2927」という文字を選択しました。次に、2 番目のテスト項目をクリックして、「est」を選択しました。最初のテキスト項目でまだ反転されている「2927」を取り除く方法が見つかりません(編集モードではありませんが)。

ここに画像の説明を入力

私も電話しようとしました:

    textItem->textCursor().clearSelection();
    textItem->update();
    textItem->setTextInteractionFlags(Qt::NoTextInteraction);
    textItem->clearFocus();

しかし、彼は行動をまったく変えません。

だから今、私は回避策を見つけました:

    QString s = textItem->toPlainText();
    textItem->setPlainText("");
    textItem->setPlainText(s);
    textItem->setTextInteractionFlags(Qt::NoTextInteraction);

私はそれが好きではありませんが、うまくいきます。

よりクリーンなソリューションのヒントはありますか?

4

1 に答える 1

5

カーソルのコピーが返されるためQGraphicsTextItem::textCursor()、効果を得るには、カーソルをテキストアイテムに戻す必要があります。

QTextCursor cursor(textItem->textCursor());
cursor.clearSelection();
textItem->setTextCursor(cursor);
于 2012-11-03T05:03:33.437 に答える