crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QTextEdit: получить символ после курсора
void*
  опции профиля:
сообщение 10.6.2008, 20:30
Сообщение #1


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


проблема такая - мне нужно при наведение на слово в QTextEdit'e поместить его, например, в QString. Вроде бы все сначала получалось, но остановился на том, что не знаю, как получить символ, используя QTextCursor...
bool TextEdit::event(QEvent *e) {
     if(e->type() == QEvent::ToolTip) {
                QHelpEvent *tipEvent = static_cast<QHelpEvent*>(e);
                QTextCursor wordCursor = cursorForPosition(tipEvent->pos());
                wordCursor.movePosition(QTextCursor::StartOfWord);
                /* хотел сделать что-то наподобие такого:
                QString str;                                    

for(;wordCursor.currentChar() != ' '; wordCursor.movePosition(QTextCursor::NextCharacter))
                                                str.append(wordCursor.currentChar());
                но подобной currentChar() функции не нашел...*/
                if(!str.isEmpty()) {
                                   QToolTip::showText(tipEvent->globalPos(), str);
                                   }
                else QToolTip::hideText();
                }
     return QTextEdit::event(e);
}

можете что-то подсказать?

Сообщение отредактировал void* - 11.6.2008, 7:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
void*
  опции профиля:
сообщение 11.6.2008, 19:07
Сообщение #2


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


вроде получилось! как раз наподобие того, что говорил ViGOur:
Цитата(ViGOur @ 11.6.2008, 9:02) *
Так пойдет?

1. Получаешь текущую строку, в которой стоит курсор (sz)
2. Получаешь позицию курсора (n)
3. Получаешь символ: sz.mid( n, 1);


bool TextEdit::event(QEvent *e) {
     if(e->type() == QEvent::ToolTip) {
                QHelpEvent *tipEvent = static_cast<QHelpEvent*>(e);
                QTextCursor wordCursor = cursorForPosition(tipEvent->pos());
                wordCursor.movePosition(QTextCursor::StartOfWord);
                QTextBlock tblock = wordCursor.block();
                const QString str = tblock.text();
                if(!str.isEmpty()) {
                           QString word;
                           int charPos = wordCursor.position() - tblock.position();
                           wordCursor.movePosition(QTextCursor::EndOfWord);
                           int lastCharPos = wordCursor.position() - tblock.position();
                           while(str[charPos] != str[lastCharPos]) {
                                              word.append(str[charPos]);
                                              ++charPos;
                                                                   }
                
                           if(!word.isEmpty()) {
                                         QToolTip::showText(tipEvent->globalPos(), word);
                                               }
                           else QToolTip::hideText();
                           }
                }
     return QTextEdit::event(e);
}

теперь буду разбираться дальше, с regexp'ами :)

Сообщение отредактировал void* - 11.6.2008, 19:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.12.2024, 16:15