14

有类似textEdit->textCursor()->selectionStart()and的函数textEdit->textCursor()->selectionEnd(),但没有函数setSelectionStart, setSelectionEnd

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

4

3 回答 3

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

这段代码使用 将光标移动到选择的开始位置,然后将其移动到选择的末尾,但通过将 a 指定为第二个参数setPosition将选择锚留在旧位置。MoveMode

最后一行将选择设置为在编辑控件中可见,因此如果您只想对所选文本进行一些操作,则应跳过它。

此外,如果您没有确切的位置,movePosition这很有帮助:您可以以各种方式移动光标,例如向右移动一个单词或向下一行。

于 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. QTextEdit:在鼠标指针下获取单词?

于 2016-06-25T10:32:25.953 回答
-3

尝试使用:

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