有一些像 textEdit->textCursor()->selectionStart()
和 textEdit->textCursor()->selectionEnd()
这样的函数,但是没有 setSelectionStart
和 setSelectionEnd
函数。
是否有手动选择文本的方法?
QTextCursor c = textEdit->textCursor();
c.setPosition(startPos);
c.setPosition(endPos, QTextCursor::KeepAnchor);
textEdit->setTextCursor(c);
setPosition
将光标移动到选择的起始位置,然后将其移动到选择的结束位置,但通过将MoveMode
作为第二个参数指定,保留选择锚点在旧位置。movePosition
很有帮助:你可以以各种方式移动光标,比如向右移动一个单词或向下移动一行。我遇到了类似的问题。
在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);
}
}
参考:
两个现有的答案
尝试使用:
QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);