crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Прокрутка на значке в трее
kin63camapa
  опции профиля:
сообщение 21.5.2012, 10:57
Сообщение #1


Студент
*

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

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




Репутация:   1  


Собственно хочется отлавливать прокрутку колёсика мышки на QSystemTrayIcon, Ну и определять естественно в какую сторону прокручивают. Не хватает мозгов сообразить как. Огуглел уже. Что то подсказывает что надо унаследоваться от него и переопеределить event.

Сообщение отредактировал kin63camapa - 21.5.2012, 11:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 21.5.2012, 12:36
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


Как вариант - наследование QCoreApplication и переопределение bool QCoreApplication::event ( QEvent * e ),
где ловить QEvent::WheelEvent, и если координаты мыши входят в QSystemTrayIcon::geometry(), перенаправлять соответствующему объекту событие. Вот как бы я сделал:

class MyTrayIcon : public QSystemTrayIcon{

public:
   virtual void whellEvent( QWhellEvent *ev )
   {
       // processing
   }
  

};

class MyApplication : public QApplication{

  private:
      MyTrayIcon *m_icon;

  protected:
     bool event(QEvent * e){
         if( m_icon &&
             e->type() == QEvent::WheelEvent &&
             m_icon->geometry().contains( ((QWheelEvent*)e)->globalPos() )
            )
         {
              m_icon->wheelEvent( (QWheelEvent*)e );
              return true;
         }
         return false;        
     }

  
  public:
    MyApplication( int argc, char **argv ):QApplication(argc,argv),m_icon(0){}

    void setSystemTrayIcon( MyTrayIcon *instance ){
         m_icon = instance;
     }
    
    MyTrayIcon* systemTrayIcon() const {
         return m_icon;
    }

};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kin63camapa
  опции профиля:
сообщение 24.5.2012, 6:37
Сообщение #3


Студент
*

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

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




Репутация:   1  


Сделал по своему

systemtrayicon.h
#ifndef SYSTEMTRAYICON_H
#define SYSTEMTRAYICON_H
#include <QSystemTrayIcon>
#include <QWheelEvent>

class SystemTrayIcon : public QSystemTrayIcon
{
    Q_OBJECT
public:
    explicit SystemTrayIcon(QObject *parent = 0);
protected:
    bool eventFilter(QObject *obj, QEvent *event);
    //virtual void  whellEvent(QWheelEvent *ev);
signals:
    void Vscroll(int v);
};
#endif // SYSTEMTRAYICON_H


systemtrayicon.cpp
#include "systemtrayicon.h"
#include <QDebug>

SystemTrayIcon::SystemTrayIcon(QObject *parent) :
    QSystemTrayIcon(parent)
{
    installEventFilter(this);
}

bool SystemTrayIcon::eventFilter(QObject *o, QEvent *e)
{
    if (e->type() == QEvent::Wheel)
    {
        QWheelEvent *ev = dynamic_cast<QWheelEvent*>(e);
        int numDegrees = ev->delta() / 8;
        int numSteps = numDegrees / 15;
        if (ev->orientation() == Qt::Horizontal)
        {
            //qDebug() << "hor";
        }
        else
        {
            //qDebug() << "vert";
            emit Vscroll(numSteps);
        }
    }
    return QSystemTrayIcon::eventFilter(o, e);
}


И уже был готов расцеловать гугл за решение как выяснилось что оно почему-то не работает в windows (кстати гуру кроссплатформс, если вы вдруг своим опытным взором увидите почему не поленитесь просвятить неудачника) (: Видимо придётся воспользоваться Вашим.

Сообщение отредактировал kin63camapa - 24.5.2012, 6:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 9.12.2023, 6:07