2010-04-17 10 views
1

Je dois exécuter slot uniquement sur doubleClick avec le bouton gauche de la souris, au lieu des deux. Avec cet événement, un double-clic fonctionne dans les deux cas, mais seulement nécessaire avec le bouton gauche de la souris. Comment je peux le faire?Qt double clic cocher le bouton gauche de la souris

this -> myComponent => QTableView 

Répondre

2

J'ai trouvé la solution suivante:

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

Je n'ai pas fait Qt depuis un moment, mais cela devrait fonctionner. Comme QTableView est un QWidget, vous pouvez également réimplémenter mouseDoubleClickEvent (QMouseEvent * e) qui vous dira quel bouton a été utilisé. Prenez soin d'appeler l'implémentation parent. Vous voulez seulement savoir quel bouton a été utilisé, mais vous voulez gérer le double-clic en utilisant le rappel avec le modèle.

Il pourrait ressembler à:

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

Non, ça ne marche pas pour moi. Je dérive mon nouvel héritage de classe de QTableView, et j'implémente là mouseDoubleClickEvent, mais cette méthode n'invoque pas. –

Questions connexes