Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: alexey11111 от Март 18, 2013, 15:27



Название: выбор кнопки мыши в mouseMoveEvent
Отправлено: 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
    }
}
В случае с левой кнопкой все работает правильно, а вот действия правой кнопки срабатывают только в том случае, если сначала нажать левую кнопку, а потом, не отпуская, нажать правую - т.е. правая срабатывает если нажаты обе кнопки.
Подскажите, что с этим делать? Как обрабатывать правую кнопку в одиночку?


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: Dancing_on_water от Март 18, 2013, 15:53
Это и не должно работать

Используйте человеческие операции сравнения


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: _OLEGator_ от Март 18, 2013, 16:03
Это и не должно работать

Используйте человеческие операции сравнения
Да неужели?
Используй
Код
C++ (Qt)
Qt::MouseButton QGraphicsSceneMouseEvent::button () const


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: mutineer от Март 18, 2013, 16:05
Код:
 bool QFlags::testFlag ( Enum flag ) const 
тебе в помощь


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: alexey11111 от Март 18, 2013, 16:59
Цитировать
Используй
Код
C++ (Qt)
Qt::MouseButton QGraphicsSceneMouseEvent::button () const
Попробовал:
Код:
if (event->button() == Qt::RightButton)
не работает

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


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: mutineer от Март 18, 2013, 17:10
Цитировать
Код:
bool QFlags::testFlag ( Enum flag ) const
тебе в помощь
а можно чуть подробнее как этим пользоваться?

Код
C++ (Qt)
if (event->buttons().testFlag(Qt::RightButton))


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: alexey11111 от Март 18, 2013, 17:12
Цитировать
Код:
bool QFlags::testFlag ( Enum flag ) const
тебе в помощь
а можно чуть подробнее как этим пользоваться?

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


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: demaker от Март 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();
}




Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: alexey11111 от Март 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)


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: alexey11111 от Март 18, 2013, 17:53
Проблема решается так. Нужно переопределить метод mousePressEvent с пустой реализацией:
Код:
void Cropper::mousePressEvent(QGraphicsSceneMouseEvent *event)
{

}


Название: Re: выбор кнопки мыши в mouseMoveEvent
Отправлено: demaker от Март 19, 2013, 08:33
Так и надо делать было изначально.
я тоже переопределял свою функцию.