Scintilla (QScintilla) 3-й маркер определить не удается

В своем классе я пытаюсь определить 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 должен быть желтый маркер. Если определения предупреждения и точки останова поменялись местами, появится желтый маркер, а черный маркер исчезнет.


person beta    schedule 24.06.2011    source источник


Ответы (1)


Ага! После нескольких дней поисков я наконец нашел проблему.

    ui_editor->setMarginMarkerMask(1, m_breakpointMarker);

Был вызван в методе установки, который вызывал странное поведение. Удаление этого все исправило.

person beta    schedule 27.06.2011
comment
Привет @beta, похоже, ты тоже часто используешь QScintilla. Вам может понравиться новый веб-сайт с множеством документов, удобных для начинающих! qscintilla.com - person K.Mulier; 13.05.2017