繁体   English   中英

Qt双击检查左键鼠标

[英]Qt double click check left button mouse

我只需要用鼠标左键在 doubleClick 上运行插槽,而不是同时运行。

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

对于此事件,双击在两种情况下都有效,但仅需要单击左键。 我该怎么做?

this -> myComponent => QTableView

我找到了以下解决方案:

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....
  }
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM