QTextEdit。如何手动选择文本?

17

有一些像 textEdit->textCursor()->selectionStart()textEdit->textCursor()->selectionEnd() 这样的函数,但是没有 setSelectionStartsetSelectionEnd 函数。

是否有手动选择文本的方法?

3个回答

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

这段代码使用setPosition将光标移动到选择的起始位置,然后将其移动到选择的结束位置,但通过将MoveMode作为第二个参数指定,保留选择锚点在旧位置。
最后一行将选择设置为在编辑控件内可见,所以如果你只想对选定的文本进行一些操作,可以跳过它。
另外,如果你没有确切的位置,movePosition很有帮助:你可以以各种方式移动光标,比如向右移动一个单词或向下移动一行。

2

我遇到了类似的问题。

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


-3

尝试使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接