Ctrl+鼠标左键单击事件捕获Qt

问题描述 投票:0回答:4

如何在 Qt 小部件中获取

Ctrl+Left mouse click
事件。我可以从
QObject::keyPressEvent()
获取按键事件,并从
QObject::mousePressEvent()
获取鼠标单击。但我需要在同一个函数中捕获两者。有人可以指出正确的方向吗?谢谢。

c++ qt
4个回答
3
投票

您可以调用QMouseEvent::modifiers()来检查它是否返回值Qt::ControlModifier


2
投票

您可以尝试使用附加变量,例如:

private:
    bool ctrlIsPressed = false;

protected:
    void keyPressEvent(QKeyEvent *event) 
    { 
        if( event->key() == Qt::Key_Control ) 
           ctrlIsPressed = true; 
    }
    void keyReleaseEvent(QKeyEvent *event)
    { 
        if( event->key() == Qt::Key_Control ) 
           ctrlIsPressed = false; 
    }

    void mousePressEvent()
    {
        if( ctrlIsPressed )
            // ... Your code
    }

1
投票

查看这个 Stackoverflow.com 问题。我认为这正是您遇到的问题。

如何在Qt中检测鼠标点击时的修饰键


0
投票

使用这个:

void Rect::mousePressEvent(QGraphicsSceneMouseEvent *event){
    if(Qt::ControlModifier == QApplication::keyboardModifiers()){
    
        //code
   
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.