2010-04-17 119 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