c++ - 在 QTextEdit 中更改文本

标签 c++ qt qtextedit qregexp qtextcursor

您好,我正在尝试创建一个功能来扫描 QTextEdit,搜索电子邮件地址和电话号码并将它们更改为粗体。当我运行它时,它使我的程序崩溃并出现错误“QTextCursor::setPosition:位置‘-1’超出范围”,这是代码:

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;
           }
    }
}

关于c++ - 在 QTextEdit 中更改文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129502/

相关文章:

c++ - C++下使用Fmodex回调

c++ - QMainWindow 不会在条件 block 中打开

ios - 项目错误:此mkspec需要Xcode 4.3或更高版本

c++ - 如何从 QTextEdit 或 QPlainTextEdit 小部件获取当前可见的文本?

c++ - 在VScode中进行调试时,如何在Docker容器中找到源代码文件夹

c++ - 如何从多个 IP 数据包重建 TCP 流?

c++ - C++ 如何将文件发送到浏览器

qt - 如何禁止在Qt中使用带按钮的键盘上的箭头键

c++ - 如何确定 QTextBlock 的字体

QTextEdit 或 QTextBrowser 性能问题