2010-04-17 163 views
1

我需要在doubleClick上用左键鼠标运行插槽,而不是两者。Qt双击检查左键鼠标

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

有了这个事件,在这两种情况下双击工作,但只有点击左键时才需要。 我该怎么做?

this -> myComponent => QTableView 

回答

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

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

不,它不适合我的工作。我从QTableView派生我的新类继承,并实现那里mouseDoubleClickEvent,但此方法不调用。 – 2010-04-18 18:38:11