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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: выбор кнопки мыши в mouseMoveEvent  (Прочитано 7479 раз)
alexey11111
Гость
« : Март 18, 2013, 15:27 »

Добрый день. Есть такая проблема: я хочу сделать так, чтобы в зависимости от нажатой кнопки мыши при ее перемещении происходили соответствующие действия. Делаю так:
Код:
void MyClass::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    if (event->buttons() & Qt::RightButton)
    {
        //Code 1
    }
    else //if (event->buttons() & Qt::LeftButton)
    {
       //Code 2
    }
}
В случае с левой кнопкой все работает правильно, а вот действия правой кнопки срабатывают только в том случае, если сначала нажать левую кнопку, а потом, не отпуская, нажать правую - т.е. правая срабатывает если нажаты обе кнопки.
Подскажите, что с этим делать? Как обрабатывать правую кнопку в одиночку?
Записан
Dancing_on_water
Гость
« Ответ #1 : Март 18, 2013, 15:53 »

Это и не должно работать

Используйте человеческие операции сравнения
Записан
_OLEGator_
Гость
« Ответ #2 : Март 18, 2013, 16:03 »

Это и не должно работать

Используйте человеческие операции сравнения
Да неужели?
Используй
Код
C++ (Qt)
Qt::MouseButton QGraphicsSceneMouseEvent::button () const
« Последнее редактирование: Март 18, 2013, 16:08 от _OLEGator_ » Записан
mutineer
Гость
« Ответ #3 : Март 18, 2013, 16:05 »

Код:
 bool QFlags::testFlag ( Enum flag ) const 
тебе в помощь
Записан
alexey11111
Гость
« Ответ #4 : Март 18, 2013, 16:59 »

Цитировать
Используй
Код
C++ (Qt)
Qt::MouseButton QGraphicsSceneMouseEvent::button () const
Попробовал:
Код:
if (event->button() == Qt::RightButton)
не работает

Цитировать
Код:
bool QFlags::testFlag ( Enum flag ) const
тебе в помощь
а можно чуть подробнее как этим пользоваться?
Записан
mutineer
Гость
« Ответ #5 : Март 18, 2013, 17:10 »

Цитировать
Код:
bool QFlags::testFlag ( Enum flag ) const
тебе в помощь
а можно чуть подробнее как этим пользоваться?

Код
C++ (Qt)
if (event->buttons().testFlag(Qt::RightButton))
Записан
alexey11111
Гость
« Ответ #6 : Март 18, 2013, 17:12 »

Цитировать
Код:
bool QFlags::testFlag ( Enum flag ) const
тебе в помощь
а можно чуть подробнее как этим пользоваться?

Код
C++ (Qt)
if (event->buttons().testFlag(Qt::RightButton))
Попробовал - все то же самое: правая кнопка срабатывает если нажата левая
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Март 18, 2013, 17:39 »

Попробуйте так:

Код:
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:

    void mousePressEvent(QMouseEvent *event);
};


Код:

void Widget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::RightButton)
    {
        qDebug()<<"RIGHT BUTTON";
    }

    if (event->button() == Qt::LeftButton)
    {
         qDebug()<<"LEFT BUTTON";
    }

    event->accept();
}


« Последнее редактирование: Март 18, 2013, 17:44 от demaker » Записан
alexey11111
Гость
« Ответ #8 : Март 18, 2013, 17:44 »

Попробуйте так:

Код:

void Widget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::RightButton)
    {
        qDebug()<<"RIGHT BUTTON";
    }

    if (event->button() == Qt::LeftButton)
    {
         qDebug()<<"LEFT BUTTON";
    }

    event->accept();
}
Попробовал. Теперь вообще ничего не происходит, события не обрабатываются.
p.s. у меня переопределяется метод mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Записан
alexey11111
Гость
« Ответ #9 : Март 18, 2013, 17:53 »

Проблема решается так. Нужно переопределить метод mousePressEvent с пустой реализацией:
Код:
void Cropper::mousePressEvent(QGraphicsSceneMouseEvent *event)
{

}
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #10 : Март 19, 2013, 08:33 »

Так и надо делать было изначально.
я тоже переопределял свою функцию.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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