crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Обработка нажатия средней кнопки мыши
Rocky
  опции профиля:
сообщение 15.9.2009, 16:45
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Всем привет!

Столкнулся с непонятной проблемой. Унаследовался от виджета (label). Требуется обрабатывать нажатие средней кнопки мыши (колесика). Объявил нужные слоты (mousePressEvent). Вроде все правильно. Поставил брэйкпоинт туда... Только вот при нажатии колесика этот слот вызывается через раз: на 10 нажатий один раз может брэйк и сработает, но не более того. Хотя при нажатии правой и левой кнопок мыши - все ок... В чем может быть проблема?
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 15.9.2009, 22:02
Сообщение #2


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Мышка может засорилась. Выложи компилируемый код...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 15.9.2009, 22:28
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Так выкладывать то особо нечего, код тривиальный.. Вот пример:
//h
namespace CleverAlloySpectrCore
{
    class CSpectrAnalizer;
    class CSpectrViewer : public QWidget
    {
        Q_OBJECT
        ....
    private slots:
        void contextMenuEvent(QContextMenuEvent *pEvent);
        void paintEvent(QPaintEvent *pEvent);
        void mouseDoubleClickEvent(QMouseEvent *pEvent);
        void mouseMoveEvent(QMouseEvent *pEvent);
        void mousePressEvent(QMouseEvent *pEvent);
        void mouseReleaseEvent(QMouseEvent *pEvent);
        void wheelEvent(QWheelEvent *pEvent);
        ....
    }
}

//cpp
...
void CSpectrViewer::mousePressEvent(QMouseEvent *pEvent)
{
    if (pEvent->buttons() == Qt::LeftButton)
    {
        //сюда попадаем
    }
    else if (pEvent->buttons() == Qt::MidButton)
    {
        //а вот сюда нет
    }
}
....


Кнопка не заедает... это точно.... В другой проге написанной на MFC все работает нормально. О, щас придумал... По идее Spy++ должен показать, что к чему, приходят сообщения до окна, или нет....Да, Qt версии 4.5
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.9.2009, 7:06
Сообщение #4


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

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

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




Репутация:   94  


Цитата(Rocky @ 16.9.2009, 2:28) *
else if (pEvent->buttons() == Qt::MidButton)
лучше писать вот так:
else if (pEvent->buttons() & Qt::MidButton)
т.к. Qt::MidButton - маска по ИЛИ. И потенциально могут быть нажаты несколько клавишь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 16.9.2009, 15:12
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Ок, учту...

Ничего не понимаю.. Проверил на своем компе дома: средняя кнопка работает вполне нормально.... А на работе нет... Попробую на самом деле почистить мышу ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 7:04