我已经建立了一个简单的Qt文本编辑器应用程序,我想它突出显示/粗体某些关键字。我有下面的highlight函数,每次键入一个字母和打开文件时都会调用它:
void objectDetector::highlightKeywords()
{
QString text = ui->textEdit->toPlainText();
// keywords
QStringList keywords;
keywords << "red" << "bold";
// Define text formats for highlighting
QTextCharFormat keywordFormat;
keywordFormat.setForeground(Qt::red);
keywordFormat.setFontWeight(QFont::Bold);
// Iterate over keywords and apply formatting
for (const QString& keyword : keywords) {
QTextDocument* document = ui->textEdit->document();
QTextCursor cursor(document);
while (!cursor.isNull() && !cursor.atEnd()) {
cursor = document->find(keyword, cursor, QTextDocument::FindWholeWords);
if (!cursor.isNull()) {
cursor.mergeCharFormat(keywordFormat);
}
}
}
}
只要找到一个关键字,程序就会崩溃。当在调试模式下运行时,它表示发生了seg错误。
编辑:问题可能是在cursor.mergeCharFormat(keywordFormat)周围,因为我在它后面添加了一个cout行,它从来没有被调用过,但是循环中它之前的行被反复调用了几次,也许可以解释seg错误?
1条答案
按热度按时间ejk8hzay1#
正确的方法是使用
QSyntaxHighlighter
,例如:只需在
QTextEdit
上创建荧光笔即可附加荧光笔: