Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Hordi от Декабрь 18, 2008, 16:49



Название: Как спозиционироваться на QTextCursor?
Отправлено: Hordi от Декабрь 18, 2008, 16:49
Приветствую

Использую QPlainTextEdit (Qt-4.4.3). Задача - выделить цветом определенные слова и спозиционироваться на первое найденное слово. Делаю так, так написано ниже. Все как бы работает, но после N-ой попытки весь текст становится зеленым и таким уже и остается... Проблема в позиционировани, т.е. если убрать строку _pEdit->setTextCursor(tc_first) то все работает (кроме позиционирования)...
Помогите плз...

Код:

QTextCursor tc,tc_first;
QTextCharFormat f;
f.setBackground(Qt::green);

//_pEdit - это QPlainTextEdit

QString str("XXX");

QTextDocument* pDoc = _pEdit->document();
for(int position=0;;){
  tc = pDoc->find(str,position,QTextDocument::FindCaseSensitively);
  if(tc.isNull()){
    break;
  }
  tc.setCharFormat(f);

  if(tc_first.isNull()){
    tc_first = tc;
  }
               
  position = tc.position()+str.length();
}

if(!tc_first.isNull()){
  tc_first.clearSelection();
  _pEdit->setTextCursor(tc_first);
}


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: panAlexey от Декабрь 19, 2008, 00:30
я бы воспользовался лучше сцинтилой.
либо гораздо более зрелая чем плаин текст от кт.


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: Mikhail от Декабрь 19, 2008, 10:00
Для выделения цветом рекомендую использовать QSyntaxHighlighter.
Этот класс идеально выполнит задачу.

panAlexey
Используйте на здоровье сцинтилу. Тащите в проект кучу дополнительного кода.
А другие пусть используют Qt и его "слабый класс" QPlainTextEdit.


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: Hordi от Декабрь 19, 2008, 10:29
У меня на весь текст с десяток выделений всего найдется, поэтому чем выделять - особо не принципиально, хотя ща попробую...


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: panAlexey от Декабрь 19, 2008, 11:13
panAlexey
Используйте на здоровье сцинтилу. Тащите в проект кучу дополнительного кода.
А другие пусть используют Qt и его "слабый класс" QPlainTextEdit.
я не про слабость говорил, а про зрелость. У QPlainTextEdit возраст грудного младенца,
А Scintill-е уже 10 лет... Как думаешь что стабильнее и проработанее?
А насчет "Тащите в проект кучу дополнительного кода" - решение в любом случае индивидуально, не надо кря, а надо прикинуть +/-. Например минусом является то, что класс недавний, т.е. на любой Qt4x уже не будет работать - надо обновляться...


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: Mikhail от Декабрь 19, 2008, 11:41
С помощью младенческих классов Qt, сделан qPEditor  - http://www.anyqsoft.com/qPEditor?Lang=Rus (http://www.anyqsoft.com/qPEditor?Lang=Rus)

Наверно, существенно хуже скинтиллы, но на чистом Qt.

Минусом использования стороннего кода, иногда является необходимость его сущственно допиливать под себя.


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: panAlexey от Декабрь 19, 2008, 12:20
С помощью младенческих классов Qt, сделан qPEditor  - http://www.anyqsoft.com/qPEditor?Lang=Rus (http://www.anyqsoft.com/qPEditor?Lang=Rus)
Наверно, существенно хуже скинтиллы, но на чистом Qt.
Минусом использования стороннего кода, иногда является необходимость его сущственно допиливать под себя.
qPEditor-ом не пользуюсь, равно как и ИДЕ.
еще раз повторю, что выбор компонент - вопрос стратегический.
споры подобного уровня решаются рейтингами потребительских предпочтений.
а мнение программистов практически всегда пристрастно.


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: Mikhail от Декабрь 19, 2008, 12:51
qPEditor-ом не пользуюсь, равно как и ИДЕ.
еще раз повторю, что выбор компонент - вопрос стратегический.
споры подобного уровня решаются рейтингами потребительских предпочтений.
а мнение программистов практически всегда пристрастно.

Высекаю нетленку зубилом на камне.
Ослепну, но очки не надену. ( сказал panAlexey ).
Хотелось бы посмотреть на предмет вашей гордости( ПО на Qt в исходниках) , на котором мы все будем учиться.


Название: Re: Как спозиционироваться на QTextCursor?
Отправлено: ритт от Декабрь 19, 2008, 13:31
при позиционировании на найденном слове должно сохраняться выделение слова или требуется просто стать перед первым символом слова?

попробуй поменять местами
  tc.setCharFormat(f);
и
    tc_first = tc;


зы. опционально: QTextCursor::mergeCharFormat и доп.возможность поиска по QTextDocument::FindWholeWords