在我的课堂上,我尝试定义 3 个标记,一个用于错误,一个用于警告,一个用于断点。当我只尝试定义 2 个标记时,这很有效,但由于某种原因,这些标记中的第三个在添加到一行时没有出现。如果您切换定义的顺序,则在调用 markerAdd() 时总是第三个未能出现。像素图是有效的,并且 Scintilla 的返回值对于定义和添加标记似乎都是正确的。这更像是一个一般的 Scintilla 问题,而不是我认为的 QScintilla 问题,因为 QScintilla 只是在调用底层的 scintilla 代码之前进行一些检查。我什至不知道从哪里开始调试这段代码。如果有人能对此有所了解,无论是已知的闪烁怪癖还是我的错,我将永远感激不尽。
m_errorIndicator = ui_editor->markerDefine(QPixmap(":/sourcefile/icon_set/icons/bullet_red.png"));
m_breakIndicator = ui_editor->markerDefine(QPixmap(":/sourcefile/icon_set/icons/bullet_black.png"));
m_warningIndicator = ui_editor->markerDefine(QPixmap(":/sourcefile/icon_set/icons/bullet_yellow.png"));
void SourceFile::on_actionAddBreakpoint_triggered()
{
qWarning() << "Added breakpoint to " << m_currentLine;
qWarning() << ui_editor->markerAdd(m_currentLine, m_breakIndicator);
m_breakpoints.append(m_currentLine);
}
void SourceFile::on_actionRemoveBreakpoint_triggered()
{
ui_editor->markerDelete(m_currentLine, m_breakIndicator);
m_breakpoints.removeAll(m_currentLine);
}
void SourceFile::clearProblems()
{
ui_editor->markerDeleteAll(m_errorIndicator);
ui_editor->markerDeleteAll(m_warningIndicator);
}
void SourceFile::markProblems(const QStringList& errors, const QStringList& warnings)
{
foreach(const QString& error, errors) {
int line = error.section(":", 1, 1).toInt();
if(--line < 0) continue;
ui_editor->markerAdd(line, m_errorIndicator);
}
foreach(const QString& warning, warnings) {
int line = warning.section(":", 1, 1).toInt();
if(--line < 0) continue;
ui_editor->markerAdd(line, m_warningIndicator);
}
}
printf 语句旁边应该有一个黄色项目符号。如果切换警告和断点定义,黄色子弹会出现,黑色子弹会消失。