2012-02-19 62 views
9

有像textEdit->textCursor()->selectionStart()textEdit->textCursor()->selectionEnd()功能,但没有功能setSelectionStartsetSelectionEndQTextEdit。如何手动选择文本?

有什么办法可以手动选择文本的一部分吗?

回答

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

这段代码将光标移动到使用setPosition选择的开始位置,然后将其移动到所述选择的端部,而是通过指定MoveMode作为第二叶选择锚点在老位置参数。

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

此外,如果您没有确切位置,movePosition会有帮助:您可以将光标移动到various ways,例如向右或向下移动一行。

+0

如何更新选择区域? – 2015-12-19 10:41:24

-3

尝试使用:

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

我遇到了类似的问题。 在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: get word under the mouse pointer?