【问题标题】:QTextEdit. How to select text manually?QTextEdit。如何手动选择文本?
【发布时间】:2020-09-08 14:27:45
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt selection qtextedit


    【解决方案1】:
     QTextCursor c = textEdit->textCursor();
     c.setPosition(startPos);
     c.setPosition(endPos, QTextCursor::KeepAnchor);
     textEdit->setTextCursor(c);
    

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

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

    另外,如果您没有确切的位置,movePosition 会很有帮助:您可以在various ways 中移动光标,例如向右移动一个单词或向下一行。

    【讨论】:

      【解决方案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: get word under the mouse pointer?

      【讨论】:

        【解决方案3】:

        尝试使用:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多