Qt双击检查左键鼠标

时间:2010-04-17 20:01:30

标签: c++ qt

我只需要在使用左键鼠标的doubleClick上运行插槽,而不是两者。

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

使用此事件,在这两种情况下双击都有效,但只需单击左键即可。 我怎么能这样做?

this -> myComponent => QTableView

3 个答案:

答案 0 :(得分:2)

我有一段时间没有做过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);
}

答案 1 :(得分:2)

我找到了以下解决方案:

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 :(得分:0)

doubleClicked 信号从 mouseDoubleClick 插槽发出。您可以覆盖mouseDoubleClick插槽,以检查双击是否来自左侧按钮,如果保留了双击,则可以调用mouseDoubleClick父方法,然后将发出doubleClicked信号。

@pyqtSlot(QMouseEvent)
 def mouseDoubleClickEvent(self, event:QMouseEvent):
    if event.button() == Qt.LeftButton:
        super().mouseDoubleClickEvent(event)