QChartView, RubberBand и поведение правой кнопки мыши

У меня есть класс, полученный из QChartView, и я включил выбор резинки в нем

MyChartView::MyChartView(QChart* chart)
:QChartView(chart)
{
    setMouseTracking(true);
    setInteractive(true);
    setRubberBand(RectangleRubberBand);
}

В документации Qt сказано, что

Если отпустить левую кнопку мыши и включить резинку, событие будет принято, и изображение будет увеличено в прямоугольнике, указанном резинкой. Если это событие правой кнопки мыши, то представление уменьшается.

Я не хочу уменьшать масштаб правой кнопки. Я пытался переопределить mouseReleaseEvent

void MyChartView::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->buttons() == Qt::RightButton)
    {
        std::cout << "my overriden event" << std::endl;
        return; //event doesn't go further
    }
    QChartView::mouseReleaseEvent(e);//any other event
}

но это ничего не печатает.

Как я могу изменить это поведение?

2 ответа

Решение

Решение проблемы очень просто. Я только что перепутал button() а также buttons() функции. Следующий код работает правильно:

void MyChartView::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() == Qt::RightButton)
    {
        std::cout << "my overriden event" << std::endl;
        return; //event doesn't go further
    }
    QChartView::mouseReleaseEvent(e);//any other event
}

вот мое рабочее решение для Qt5:

      void MyChartView::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::RightButton)
    {
        QGraphicsView::mouseReleaseEvent(event);
    }
    else
    {
        QChartView::mouseReleaseEvent(event);
    }
}

Преимущество заключается в том, что контекстное меню можно открыть с помощью щелчка правой кнопкой мыши.

Другие вопросы по тегам