Russian Qt Forum
Ноябрь 23, 2024, 03:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QT4] QScintilla и маркер.  (Прочитано 2941 раз)
maks
Гость
« : Февраль 13, 2009, 02:07 »

Добрый день.
Как QScintilla задать уникальный маркер который можно было бы пермещать только из кода к определенной строке. Учитывая то что есть другие маркеры которые могуть задавать пользователи.
Записан
Dodge
Гость
« Ответ #1 : Май 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);


Вроде ничего сложного, если что пиши.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 21.