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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QScriptEngineDebugger перехват подсказок.  (Прочитано 4566 раз)
trump
Гость
« : Июль 07, 2014, 17:19 »

Если в окне кода QScriptEngineDebugger навести мышь на переменную, то появится подказка в виде значения этой переменной.

Можно ли без перекомпиляции QT перехватывать эту подсказку?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Июль 07, 2014, 17:42 »

Что значит перехватывать? Получать сообщение из tooltip, блокировать tooltip?
В большинстве вариантов поможет eventFilter.
Записан
trump
Гость
« Ответ #2 : Июль 08, 2014, 12:17 »

Получить сообщение из Tooltip, изменить его, показать уже измененное.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Июль 08, 2014, 12:28 »

Получить сообщение из Tooltip, изменить его, показать уже измененное.
Как выше написано, попробуйте использовать фильтры событий (eventFilter).
Записан
trump
Гость
« Ответ #4 : Июль 08, 2014, 12:35 »

Как выше написано, попробуйте использовать фильтры событий (eventFilter).

Ну я могу установить фильтр.

Код:
bool eventFilter(QObject* object,QEvent* event)
  {
      if(event->type() == QEvent::ToolTip)
      {
          QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);

          return true;
      }
      else
      {
            return QObject::eventFilter(object,event);
      }
  };

Как добраться до текста тултипа?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #5 : Июль 08, 2014, 13:01 »

QToolTip::text()

Это статический метод.
Записан
trump
Гость
« Ответ #6 : Июль 08, 2014, 13:16 »

QToolTip::text()

Это статический метод.

Это в данном случае не работает, но всё-равно спасибо.
« Последнее редактирование: Июль 08, 2014, 14:11 от trump » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #7 : Июль 08, 2014, 14:22 »

Это в данном случае не работает, но всё-равно спасибо.
Возвращает пустую строку?
Записан
trump
Гость
« Ответ #8 : Июль 08, 2014, 14:30 »

Это в данном случае не работает, но всё-равно спасибо.
Возвращает пустую строку?

Да. Грустный
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #9 : Июль 08, 2014, 14:34 »

Да. Грустный
Возможно, в момент срабатывания tooltip, а точнее instance QTipLabel еще не создано?
Можно попробовать вызвать обработчик eventFilter базового класса и после его отработки проверить значение.
Записан
trump
Гость
« Ответ #10 : Июль 08, 2014, 15:07 »

QObject::eventFilter нормально отрабатывает, появляется тултип, но QToolTip::text всё-равно возвращает пустую строку.
Но если пока тултип одной переменной показывается, резко перевести курсор на другую переменную, то QToolTip::text начинает возвращать нужное значение. Если убрать курсор мыши за границы окна и опять навести на переменную, то QToolTip::text опять начинает возвращать пустую строку.

Код:
bool eventFilter(QObject* object,QEvent* event)
  {
      if(event->type() == QEvent::ToolTip)
      {
          //QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
          QString sToolTip;
         
          sToolTip=QToolTip::text();
          qDebug(sToolTip.toAscii().data());
         
          QObject::eventFilter(object,event);
         
          sToolTip=QToolTip::text();
          qDebug(sToolTip.toAscii().data());

          return true;

      }
      else
      {
          return QObject::eventFilter(object,event);
      }

  };
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #11 : Июль 08, 2014, 15:56 »

Скорее всего для полной подготовки и отображения tooltip, нужно крутануть цикл обработки событий.
Чуть позже доберусь до компьютера и покажу одну мысль.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #12 : Июль 08, 2014, 18:02 »

Предлагаю попробовать следующую конструкцию:

Код
C++ (Qt)
bool Tracker::eventFilter(QObject* object,QEvent* event)
{
     if(event->type() == QEvent::ToolTip)
     {
           bool ret = QObject::eventFilter(object,event);
           QMetaObject::invokeMethod( this, "checkToolTip", Qt::QueuedConnection );
           retrun ret;
     }
     return QObject::eventFilter(object,event);
}
 
void Tracker::checkToolTip()
{
      qDebug() << QToolTip::text();
}
 

Описать дополнительный слот checkToolTip, который будет вызываться через очередь событий.
Записан
trump
Гость
« Ответ #13 : Июль 09, 2014, 10:22 »

Спасибо за код!
Но ничего не изменилось. Грустный
Придется видимо перекомпилировать QT.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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