Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt4] QTextEdit: получить слово, при наведении на него 
V
    Опции темы
anatox91
Дата 11.6.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



проблема такая - мне нужно при наведение на слово в 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;
                while(wordCursor.currentChar() != ' ')                           
                         str.append(wordCursor.currentChar());
                         wordCursor.movePosition(QTextCursor::NextCharacter);
                но подобной currentChar() функции не нашел...                                
                */
                if(!str.isEmpty()) {
                                   QToolTip::showText(tipEvent->globalPos(), str);
                                   }
                else QToolTip::hideText();
                }
     return QTextEdit::event(e);
}

поможете?  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Torsten
Дата 11.6.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: 3
Всего: 7



Текущий символ можно получить так :

Код

QChar CurrentChar()
{
    QTextCursor Cursor(textCursor());
    QTextBlock Block     = Cursor.block();
    const QString sText  = Block.text();
    if (!sText.size())
        return 0;
    int nСurCharPos      = Cursor.position() - Block.position();
    return sText[nCurCharPos];  // символ за курсором
}



Как это получается.
Cursor.position() - возвращает асболютную позицию курсора в TextEdit
Block.position() - возвращает аболютную позицию начала QTextBlock в QTextEdit (т.е грубо говоря строки). 
Ну и просто из абсолютной позиции вычитаем абсолютную позицию начала строки и получаем смещение для символа в строке.

Это сообщение отредактировал(а) Torsten - 11.6.2008, 14:22
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
anatox91
Дата 11.6.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Torsten, большое спасибо, чуть переделал под себя - работает как надо!


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.