Привет я пытаюсь сделать функцию для сканирования через QTextEdit, искать адреса электронной почты и номера телефонов и изменить их на полужирный. Когда я запускаю его, он вылетает из моей программы с ошибкой «QTextCursor :: setPosition: Position ‘-1’ out of range», вот код:
void MakeDisplay::processDoc(){
QString doc = text->toPlainText();
QTextCursor cursor = text->textCursor();
QTextCharFormat format;
format.setFontWeight(75);
QRegExp emails("*.@.*");
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++;
}
}
Вам нужно искать, пока ничего интересного не будет найдено:
void MakeDisplay::processDoc(){
QString doc = text->toPlainText();
QTextCursor cursor = text->textCursor();
QTextCharFormat format;
format.setFontWeight(75);
QRegExp emails("*.@.*");
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;
}
}
}
Других решений пока нет …