我正在尝试在Qt中创建一个小语法高亮符,并且我想显示一个工具提示,说明当用户挂起错误时的错误描述。
(我是QSyntaxHighlighter的子类)
我尝试过QTextCharFormat::setToolTip函数,但它没有起作用:/文本如预期一样带有红色下划线,但当我悬停在它上时,没有显示任何工具提示。
我错过了什么吗?还是我应该用另一种方法?
void CodeHighlighter::highlightBlock(const QString &text)
{
_errorFormat.setProperty(QTextFormat::TextUnderlineStyle, QTextCharFormat::SpellCheckUnderline);
_errorFormat.setProperty(QTextFormat::TextUnderlineColor, QColor(Qt::red));
if (!isLineValid(text.toStdString())) {
// The following line does not work !
_errorFormat.setToolTip(QString::fromStdString(getLastError()));
setFormat(0, text.length(), _errorFormat);
}
for (const HighlightingRule &rule : qAsConst(_highlightingRules)) {
QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text);
while (matchIterator.hasNext()) {
QRegularExpressionMatch match = matchIterator.next();
QTextCharFormat format = this->format(match.capturedStart());
format.merge(rule.format);
setFormat(match.capturedStart(), match.capturedLength(), format);
}
}
}发布于 2022-07-31 14:59:01
您可以通过重写对QEvent::ToolTip的处理和自己进行查找来使其工作。
我没有时间用C++重写我的完整答案,但是:
QTextEdit或QPlainTextEdit上,您可以在setMouseTracking(True)上重写event方法,并将其交给默认实现,除非是event->type() == QEvent::ToolTip。这个问题的另一个答案是,如果你在使用它们,你也需要修正它们的页边距。)cursorForPosition,然后使用.block().layout()->formats()并迭代,比较偏移量和游标的position()。additionalFormats()是不推荐的方法,formats()是现代的方法。https://stackoverflow.com/questions/59163492
复制相似问题