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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.6.2008, 9:02
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Так пойдет?

1. Получаешь текущую строку, в которой стоит курсор (sz)
2. Получаешь позицию курсора (n)
3. Получаешь символ: sz.mid( n, 1);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 11.6.2008, 9:33
Сообщение #3


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

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

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




Репутация:   3  


ммм.. это мне в данном примере нужно было бы получить символ, тогда бы наверно получилось бы сделать именно через QTextCursor, а вообще задача состоит в том чтобы получить слово, на которое был наведен курсор... т.е. выдрать из строки определенное слово...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.6.2008, 9:43
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Понятно, другими словами ты делаешь редактор вроде студийного, в котором при наведении на переменную или функцию показывается их поднаготная. Нужно подумать как это сделать... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.6.2008, 11:18
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(void* @ 11.6.2008, 10:33) *
ммм.. это мне в данном примере нужно было бы получить символ, тогда бы наверно получилось бы сделать именно через QTextCursor, а вообще задача состоит в том чтобы получить слово, на которое был наведен курсор... т.е. выдрать из строки определенное слово...

По-моему, вывод такой подсказки вполне логичен, если слово выделено, иначе алгоритм громоздкий. Попробуй делать вывод подсказки именно при выделении. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 11.6.2008, 12:44
Сообщение #6


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

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

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




Репутация:   3  


ViGOur, именно так, ты меня раскусил ;) план такой - получаем слово при наведении, составляем определенный regexp, и ищем по всем остальным QTextEdit'ам моего QTabWidget'a B)
AD, не, так мне не нравится, не очень удобно будет, да и если бы я так делал, то вряд ли были бы трудности, т.к. есть функция QString QTextCursor::selectedText(), а вот именно в моем варианте есть проблемы с получением нужного слова...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 11.6.2008, 19:07
Сообщение #7


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

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.6.2008, 10:07
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Тему разделил: Помогите составить регулярное выражение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 16.4.2024, 21:01