C++ QTextEdit。如何手动选择文本?

C++ QTextEdit。如何手动选择文本?,c++,qt,selection,qtextedit,C++,Qt,Selection,Qtextedit,有一些函数像text编辑->textCursor()->selectionStart()和text编辑->textCursor()->selectionEnd(),但没有函数setSelectionStart,setSelectionEnd 有没有办法手动选择文本的某些部分 QTextCursor c = textEdit->textCursor(); c.setPosition(startPos); c.setPosition(endPos, QTextCursor::KeepAn

有一些函数像
text编辑->textCursor()->selectionStart()
text编辑->textCursor()->selectionEnd()
,但没有函数
setSelectionStart
setSelectionEnd

有没有办法手动选择文本的某些部分

 QTextCursor c = textEdit->textCursor();
 c.setPosition(startPos);
 c.setPosition(endPos, QTextCursor::KeepAnchor);
 textEdit->setTextCursor(c);
这段代码使用将光标移动到选择的开始位置,然后将光标移动到选择的结束位置,但通过指定a作为第二个参数将选择定位点保留在旧位置

最后一行将所选内容设置为在编辑控件内可见,因此如果您只想对所选文本执行某些操作,则应跳过该行

此外,如果您没有准确的位置,这也很有帮助:您可以将光标移入,例如向右或向下移动一个单词。

尝试使用:

QTextCursor cur = tw->textCursor();
cur.clearSelection();
tw->setTextCursor(cur);

我遇到了类似的问题。 在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);
    }
}
参考:

  • 现有的两个答案