Название: [QT4] QScintilla и маркер.
Отправлено: maks от Февраль 13, 2009, 02:07
Добрый день. Как QScintilla задать уникальный маркер который можно было бы пермещать только из кода к определенной строке. Учитывая то что есть другие маркеры которые могуть задавать пользователи.
Название: Re: [QT4] QScintilla и маркер.
Отправлено: Dodge от Май 07, 2009, 03:07
Вот класс, решающий твою задачу class QyScintillaMarginMarker { public: QyScintillaMarginMarker( QsciScintilla * scintilla, QsciScintilla::MarkerSymbol symbol, int id ); ~QyScintillaMarginMarker();
int position() const { return p_position; } // строка на против которой стоит маркет, по умолчанию -1 QsciScintilla * scintilla() const { return p_scintilla; }
void setPosition( int position ); // Установить строку напротив которой будет маркер void setForeground( const QColor & color ); void setBackground( const QColor & color );
private: QsciScintilla * p_scintilla; int markerHandle, p_id, p_position;
};
QyScintillaMarginMarker::QyScintillaMarginMarker( QsciScintilla * scintilla, QsciScintilla::MarkerSymbol symbol, int id ) {
p_scintilla = scintilla; p_id = id; markerHandle = 0; p_position = -1;
if (p_scintilla) p_scintilla->markerDefine( symbol, p_id ); // деклприруем маркер, symbol - вид маркера, p_id - тип маркера (произвольное число, типы маркеров рекомендую сделать энумом)
}
QyScintillaMarginMarker::~QyScintillaMarginMarker() {
if ( markerHandle > 0 ) p_scintilla->markerDeleteHandle(markerHandle); // удаляем макер
}
void QyScintillaMarginMarker::setPosition( int position ) {
Q_ASSERT(p_scintilla);
p_position = position;
if ( markerHandle > 0 ) p_scintilla->markerDeleteHandle(markerHandle); // удаляем макер ели уже установлен
markerHandle = p_scintilla->markerAdd( p_position, p_id ); // вешаем маркер типа p_id, на строку p_position
}
void QyScintillaMarginMarker::setForeground( const QColor & color ) {
Q_ASSERT(p_scintilla);
p_scintilla->setMarkerForegroundColor( color, p_id );
}
void QyScintillaMarginMarker::setBackground( const QColor & color ) {
Q_ASSERT(p_scintilla);
p_scintilla->setMarkerBackgroundColor( color, p_id );
}
Использование QyScintillaMarginMarker * myMarker; QsciScintilla * myScintilla;
...
myMarker = new QyScintillaMarginMarker( myScintilla, QsciScintilla::RightArrow, 0 ); // создаем маркер - стрелочку
// расскраска myMarker->setBackground( QColor("#ff9c00") ); myMarker->setForeground( QColor("#181818") );
...
myMarker->setPosition(50); // устанавливаем положение
...
myMarker->setPosition(10);
Вроде ничего сложного, если что пиши.
|