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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание кастомных виджетов  (Прочитано 2806 раз)
Lestat
Гость
« : Декабрь 09, 2009, 00:35 »

Здравствуйте!
Работаю над проектом, в котором хотелось бы использовать продвинутые кастомные виджеты.
А именно хотелось бы создать либу, может даже выложить ее как open source, с контролами как в продвинутых 3D-редакторах.

Для примера ориентируюсь на виджеты modo и последней бетты Blender'а.
Там интерфейс завязан на скрипты. Т.е. каждый контрол при нажатии выполняет строчку скрипта.
Поэтому в качестве тултипа хотелось бы видеть описание и команду для данного контрола.

Вот и возник первый вопрос:
Как создать кастомный тултип! Нужно изменять не только текст, но и вообще его перерисовать желательно по своему.
Знаю что есть класс QToolTip, а также QWidget для новых контролов.
Как указать QWidget'у что нужно использовать кастомный тултип.
В QWidget'е тултип задается только строкой, а не, например, указателем на экземпляр QToolTip.
Записан
Dendy
Гость
« Ответ #1 : Декабрь 09, 2009, 00:47 »

Для этого нужно переопределить у кастомного виджета QObject::event() и реагировать на событие QEvent::ToolTip, пример:

Код
C++ (Qt)
bool MyCustomWidget::event( QEvent * e )
{
   if ( e->type() == QEvent::ToolTip )
   {
       QHelpEvent * helpEvent = static_cast<QHelpEvent*>( e );
       // process displaying custom tool tip
       return true; // this is needed to block standard tooltip
   }
   return QObject::event( e );
}

Другой способ - повесить на каждый контрол по фильтру событий. Ещё один способ (который я реализовал в одном из проектов) - вешать фильтр событий в переопределёном методе QStyle::polish( QWidget * ).
Записан
Lestat
Гость
« Ответ #2 : Декабрь 09, 2009, 01:50 »

Спасибо, работает первый метод! Вполне устраивает!)
По крайней мере знаю куда дальше двигаться)
Правда заметил что нужно поменять
Код
C++ (Qt)
return QObject::event( e );
на
Код
C++ (Qt)
return QWidget::event( e );
иначе такой код:
Код
C++ (Qt)
bool MyCustomWidget::event( QEvent * e )
{
   return QObject::event( e );
}
тултип не рисует
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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