【问题标题】:QTextEdit - get selection line numbersQTextEdit - 获取选择行号
【发布时间】:2012-07-25 12:03:11
【问题描述】:

我有以下代码(在 mouseReleaseEvent 中实现)来检测用户何时选择了文本行:

    QTextCursor cursor = this->textCursor();
    int start = cursor.selectionStart();
    int end = cursor.selectionEnd();

    if(!cursor.hasSelection())
        return; // No selection available

    qWarning() << "start: " << start << " end: " << end << endl;

问题是:我需要选择开始和结束的行号。我一直在和积木作斗争,什么也没解决,你能给我一个线索吗?

【问题讨论】:

    标签: c++ qt text qt4 qtextedit


    【解决方案1】:

    这可能不是最好的解决方案,但它似乎对我有用。变量selectedLines 将包含选择了多少行。

    QTextCursor cursor = ui->plainTextEdit->textCursor();
    int selectedLines = 0; //<--- this is it 
    if(!cursor.selection().isEmpty())
    {
        QString str = cursor.selection().toPlainText();
        selectedLines = str.count("\n")+1;
    }
    

    希望对你有所帮助:)

    【讨论】:

      【解决方案2】:

      我看到了使用 2 个 QTextCursor 方法链的简单方法 - setPosition 和 blockNumber。

      QTextCursor cursor = this->textCursor();
      int start = cursor.selectionStart();
      int end = cursor.selectionEnd();
      
      if(!cursor.hasSelection())
          return; // No selection available
      
      cursor.setPosition(start);
      int firstLine = cursor.blockNumber();
      cursor.setPosition(end, QTextCursor::KeepAnchor);
      int lastLine = cursor.blockNumber();
      qWarning() << "start: " << firstLine << " end: " << lastLine << endl;
      

      更新:

       cursor.setPosition(start);
       cursor.block().layout()->lineForTextPosition(start).lineNumber();
       // or
       cursor.block().layout()->lineAt(<relative pos from start of block>).lineNumber();
      

      将位置设置为选择的开始。获取当前块,获取块布局并使用 Qt API 获取行号。我不知道返回的行号对于整个文档或布局是绝对的。如果仅用于布局,则需要一些额外的过程来计算先前块的行号。

      for (QTextBlock block = cursor.block(). previous(); block.isValid(); block = block.previous())
          lines += block.lineCount();
      

      【讨论】:

      • 有一个问题:在你发帖之前我就知道该怎么做,但我想获取 LINE 号码,而不是块号码。块!=行,在我的文档中有两行块,所以我不能使用你的代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多