Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
qt:更改qcontextmenu触发器_Qt_Contextmenu - Fatal编程技术网

qt:更改qcontextmenu触发器

qt:更改qcontextmenu触发器,qt,contextmenu,Qt,Contextmenu,通常,单击鼠标右键会导致QContextMenuEvent。但是有可能改变按钮吗?我的意思是,我想使用鼠标左键和“ALT”修改器。我试图在mousePressEvent中访问它,但它的工作方式不正确。您可以通过子类化QWidget来实现这一点: class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); protected: void mouseReleaseEvent(QMouseEvent

通常,单击鼠标右键会导致QContextMenuEvent。但是有可能改变按钮吗?我的意思是,我想使用鼠标左键和“ALT”修改器。我试图在mousePressEvent中访问它,但它的工作方式不正确。

您可以通过子类化QWidget来实现这一点:

class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = 0);

protected:
    void mouseReleaseEvent(QMouseEvent *event);
};
及其实施:

MyWidget:: MyWidget(QWidget *parent): QWidget(parent)
{
}

void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
    QMenu menu;
    QAction *act1 = menu.addAction("action1");
    QAction *act2 = menu.addAction("action2");
    if(event->button() == Qt::LeftButton&&
            event->modifiers()&Qt::AltModifier){

        QAction *selectedAction = menu.exec(event->globalPos());
        if(selectedAction == act1)
        {
            //do something
        }else if( selectedAction == act2 ){
            //do something else
        }
    }
}

请展示你是如何做到这一点的。这与“mouseReleaseEvent”有关吗。我采纳了你的建议,解决了一些问题。我在QGraphicscene和QGraphicsItem上使用此解决方案,我不希望在显示菜单时选择该项。