Qt двойной щелчок мышью левой кнопкой мыши - PullRequest
1 голос
/ 18 апреля 2010

Мне нужно запускать слот только при двойном щелчке левой кнопкой мыши, вместо обоих.

// this->myComponent is a QTableView
   connect(this -> myComponent, SIGNAL (doubleClicked (const QModelIndex & )), this,
  SLOT (performSomeAction(const QModelIndex & )));

В этом случае двойной щелчок работает в обоих случаях, но требуется только при нажатии левой кнопки. Как я могу это сделать?

this -> myComponent => QTableView

Ответы [ 2 ]

2 голосов
/ 18 апреля 2010

Я нашел следующее решение:

this -> myComponent -> viewport() -> installEventFilter(this);

bool MyClass::eventFilter(QObject *obj, QEvent *event) {
  this -> event = event;
  return QWidget::eventFilter(obj, event);
}

...

if (this -> event -> type() == QEvent::MouseButtonDblClick) {
  QMouseEvent * mouseEvent = static_cast <QMouseEvent *> (event);

  if (mouseEvent -> button() == Qt::LeftButton) {
    // do something....
  }
}
2 голосов
/ 18 апреля 2010

Я давно не делал Qt, но это должно сработать. Поскольку QTableView является QWidget, вы также можете повторно реализовать mouseDoubleClickEvent (QMouseEvent * e), который бы сообщал вам, какая кнопка была использована. Позаботьтесь о вызове родительской реализации. Вы только хотите знать, какая кнопка была использована, но хотите обработать двойной щелчок, используя обратный вызов с моделью.

Так это может выглядеть так:

myComponent::mouseDoubleClickEvent( QMouseEvent * e )
{
    m_leftButtonUsed = false;
    if ( e->button() == Qt::LeftButton )
    {
        m_leftButtonUsed = true;
    }

    // This will call doubleClicked (const QModelIndex & )
    QTableView::mouseDoubleClickedEvent(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...