14

textEdit->textCursor()->selectionStart()とのような関数はありますが、textEdit->textCursor()->selectionEnd()関数はありません。setSelectionStartsetSelectionEnd

テキストの一部を手動で選択する方法はありますか?

4

3 に答える 3

32
 QTextCursor c = textEdit->textCursor();
 c.setPosition(startPos);
 c.setPosition(endPos, QTextCursor::KeepAnchor);
 textEdit->setTextCursor(c);

このコードは、を使用してカーソルを選択範囲の開始位置に移動し、次に選択範囲の最後に移動しますが、2番目のパラメーターとしてaをsetPosition指定することにより、選択範囲アンカーを古い位置に残します。MoveMode

最後の行は、選択範囲を編集コントロール内に表示するように設定しているため、選択したテキストで操作を行うだけの場合は、選択範囲をスキップする必要があります。

また、正確な位置がわからない場合は、便利です。カーソルをさまざまな方法movePositionで移動できます。たとえば、1単語を右に移動したり、1行下に移動したりできます。

于 2012-02-19T15:54:05.800 に答える
1

同様の問題が発生しました。Windows 10では、「ドラッグ/移動」のバグがある可能性があります。QT_NO_DRAGANDDROPをコンパイラオプションとして使用します。これにより、QTextEditでのテキスト選択が機能しなくなります。

解決:

void QTextEditEx::mouseMoveEvent(QMouseEvent *event)
{
    QTextEdit::mouseMoveEvent(event);
    if (event->buttons() & Qt::LeftButton)
    {
        QTextCursor cursor = textCursor();
        QTextCursor endCursor = cursorForPosition(event->pos()); // key point
        cursor.setPosition(pos, QTextCursor::MoveAnchor);
        cursor.setPosition(endCursor.position(), QTextCursor::KeepAnchor);
        setTextCursor(cursor);
    }
}

void QTextEditEx::mousePressEvent(QMouseEvent *event)
{
    QTextEdit::mousePressEvent(event);
    if (event->buttons() & Qt::LeftButton)
    {
        QTextCursor cursor = cursorForPosition(event->pos());
        // int pos; member variable
        pos = cursor.position();
        cursor.clearSelection();
        setTextCursor(cursor);
    }
}

参照:

  1. 2つの既存の答え

  2. QTextEdit:マウスポインタの下で単語を取得しますか?

于 2016-06-25T10:32:25.953 に答える
-3

使用してみてください:

QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);
于 2014-01-30T07:45:56.447 に答える