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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как спозиционироваться на QTextCursor?  (Прочитано 5900 раз)
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);
}
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #1 : Декабрь 19, 2008, 00:30 »

я бы воспользовался лучше сцинтилой.
либо гораздо более зрелая чем плаин текст от кт.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #2 : Декабрь 19, 2008, 10:00 »

Для выделения цветом рекомендую использовать QSyntaxHighlighter.
Этот класс идеально выполнит задачу.

panAlexey
Используйте на здоровье сцинтилу. Тащите в проект кучу дополнительного кода.
А другие пусть используют Qt и его "слабый класс" QPlainTextEdit.
Записан
Hordi
Гость
« Ответ #3 : Декабрь 19, 2008, 10:29 »

У меня на весь текст с десяток выделений всего найдется, поэтому чем выделять - особо не принципиально, хотя ща попробую...
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #4 : Декабрь 19, 2008, 11:13 »

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

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Декабрь 19, 2008, 11:41 »

С помощью младенческих классов Qt, сделан qPEditor  - http://www.anyqsoft.com/qPEditor?Lang=Rus

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

Минусом использования стороннего кода, иногда является необходимость его сущственно допиливать под себя.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #6 : Декабрь 19, 2008, 12:20 »

С помощью младенческих классов Qt, сделан qPEditor  - http://www.anyqsoft.com/qPEditor?Lang=Rus
Наверно, существенно хуже скинтиллы, но на чистом Qt.
Минусом использования стороннего кода, иногда является необходимость его сущственно допиливать под себя.
qPEditor-ом не пользуюсь, равно как и ИДЕ.
еще раз повторю, что выбор компонент - вопрос стратегический.
споры подобного уровня решаются рейтингами потребительских предпочтений.
а мнение программистов практически всегда пристрастно.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #7 : Декабрь 19, 2008, 12:51 »

qPEditor-ом не пользуюсь, равно как и ИДЕ.
еще раз повторю, что выбор компонент - вопрос стратегический.
споры подобного уровня решаются рейтингами потребительских предпочтений.
а мнение программистов практически всегда пристрастно.

Высекаю нетленку зубилом на камне.
Ослепну, но очки не надену. ( сказал panAlexey ).
Хотелось бы посмотреть на предмет вашей гордости( ПО на Qt в исходниках) , на котором мы все будем учиться.
Записан
ритт
Гость
« Ответ #8 : Декабрь 19, 2008, 13:31 »

при позиционировании на найденном слове должно сохраняться выделение слова или требуется просто стать перед первым символом слова?

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


зы. опционально: QTextCursor::mergeCharFormat и доп.возможность поиска по QTextDocument::FindWholeWords
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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