2014-03-02 46 views
1

您好我正在尝试做一个函数来扫描QTextEdit,搜索电子邮件地址和电话号码,并将其更改为粗体。当我运行它,它崩溃我的程序错误“QTextCursor :: setPosition两种:位置‘-1’超出范围”,这里是代码:更改QTextEdit中的文本

void MakeDisplay::processDoc(){ 
    QString doc = text->toPlainText(); 
    QTextCursor cursor = text->textCursor(); 
    QTextCharFormat format; 
    format.setFontWeight(75); 
    QRegExp emails("*[email protected]*"); 
    QRegExp phoneNums 
    ("(\\d{3}-\\d{3}-\\d{4})(\\d{3}-\\d{7})(\\d{10})(\\(\\d{3}\\)\\d{3}-\\d{4})(\\(\\d{3}\\)\\d{7})"); 
    int i, j; 
    i = 0; 
    j = 0; 
    while (!cursor.atEnd() || (i != doc.size())){ 
     i = doc.indexOf(emails); 
     j = doc.indexOf(phoneNums); 
     cursor.setPosition(i,QTextCursor::MoveAnchor); 
     cursor.setPosition(i, QTextCursor::KeepAnchor); 
     cursor.mergeCharFormat(format); 
     cursor.setPosition(j,QTextCursor::MoveAnchor); 
     cursor.setPosition(j, QTextCursor::KeepAnchor); 
     cursor.mergeCharFormat(format); 
     i++; 
     j++; 
    } 

} 
+1

检查doc.indexOf()函数的返回值。 – elephant

回答

2

您需要搜索,直到没有更多有趣的发现:

void MakeDisplay::processDoc(){ 
    QString doc = text->toPlainText(); 
    QTextCursor cursor = text->textCursor(); 
    QTextCharFormat format; 
    format.setFontWeight(75); 
    QRegExp emails("*[email protected]*"); 
    QRegExp phoneNums 
    ("(\\d{3}-\\d{3}-\\d{4})(\\d{3}-\\d{7})(\\d{10})(\\(\\d{3}\\)\\d{3}-\\d{4})(\\(\\d{3}\\)\\d{7})"); 
    int i, j; 
    i = 0; 
    j = 0; 
    while (!cursor.atEnd()&& (i!=-1||j!=-1)) 
    { 
     if(i!=-1) 
     { 
      i = doc.indexOf(emails); 
      if(i!=-1) 
      {  
       cursor.setPosition(i,QTextCursor::MoveAnchor); 
       cursor.setPosition(i, QTextCursor::KeepAnchor); 
       cursor.mergeCharFormat(format); 
       ++i; 
      } 
     } 
     if(j!=-1) 
     { 
      j = doc.indexOf(phoneNums); 
      if(j!=-1) 
      { 
       cursor.setPosition(j,QTextCursor::MoveAnchor); 
       cursor.setPosition(j, QTextCursor::KeepAnchor); 
       cursor.mergeCharFormat(format); 
       ++j; 
      } 
    } 
}