textEdit->textCursor()->selectionStart()
とのような関数はありますが、textEdit->textCursor()->selectionEnd()
関数はありません。setSelectionStart
setSelectionEnd
テキストの一部を手動で選択する方法はありますか?
QTextCursor c = textEdit->textCursor();
c.setPosition(startPos);
c.setPosition(endPos, QTextCursor::KeepAnchor);
textEdit->setTextCursor(c);
このコードは、を使用してカーソルを選択範囲の開始位置に移動し、次に選択範囲の最後に移動しますが、2番目のパラメーターとしてaをsetPosition
指定することにより、選択範囲アンカーを古い位置に残します。MoveMode
最後の行は、選択範囲を編集コントロール内に表示するように設定しているため、選択したテキストで操作を行うだけの場合は、選択範囲をスキップする必要があります。
また、正確な位置がわからない場合は、便利です。カーソルをさまざまな方法movePosition
で移動できます。たとえば、1単語を右に移動したり、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);
}
}
参照:
2つの既存の答え
使用してみてください:
QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);