QT中右键菜单

实现方法有四种种:

第一种方法:使用Qt::DefaultContextMenu 通过重写 contextMenuEvent来实现

使用QMenu、QAction 通过重写contextMenuEvent 来实现。
链接中还有其他的方式实现

protected:

    QAction *m_pAddNew;
    QAction *m_pDelete;
    QMenu *m_pMenu;
    void contextMenuEvent(QContextMenuEvent *event);
NewTestForm::NewTestForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::NewTestForm)
{
    ui->setupUi(this);
    //添加右键 快捷菜单


    m_pMenu = new QMenu(this);


    m_pAddNew = new QAction("add new", this);
    m_pDelete = new QAction("delete", this);




    m_pMenu->addAction(m_pAddNew);
    m_pMenu->addAction(m_pDelete);
    //setContextMenuPolicy(Qt::ActionsContextMenu);


    //消息响应
    connect(m_pAddNew, &QAction::triggered,this,[=](){
        qDebug()<<"show this position--add";
    });


    connect(m_pDelete, &QAction::triggered,this,[=](){
        qDebug()<<"show this position--delete";
    });
}
void NewTestForm::contextMenuEvent(QContextMenuEvent *event)
{
    m_pMenu->exec(QCursor::pos());
    event->accept();
}

第二种:使用鼠标事件进行

void NewTestForm::mousePressEvent(QMouseEvent *event)
{


    if(event->button() == Qt::RightButton)
    {
        //m_pMenu->exec(event->pos());//fail
        //m_pMenu->exec(event->globalPos());//ok
        m_pMenu->exec(QCursor::pos());//ok//相对于屏幕的坐标
    }
    }

注意:QAction *QMenu::exec()

中必须使用全局坐标,详情请看QT的帮助

其中,使用event->pos()时,鼠标点击时的坐标,与界面显示坐标不一致。当使用globalPos() 和 QCursor::pos() 时 弹出的菜单栏与原来一致。

参考资料
C++培训之Qt右键菜单的添加
http://www.itcast.cn/news/20151228/16362379744.shtml

Qt之自定义菜单(右键菜单)
http://blog.sina.com.cn/s/blog_a6fb6cc90101f0xn.html

Qt右键创建菜单(包含二级菜单)
https://blog.csdn.net/u011624093/article/details/81157279?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

qt 右键菜单
https://blog.csdn.net/abigale_zhw/article/details/8235560

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于在Qt使用TreeView控件,并添加右键菜单的需求,您可以按照以下步骤进行操作: 1. 创建TreeView控件:在Qt,您可以使用QTreeView类创建一个TreeView控件。例如,在您的窗口类添加以下代码: ```cpp QTreeView *treeView = new QTreeView(this); ``` 2. 创建右键菜单:使用QMenu类创建一个右键菜单。例如,在您的窗口类的构造函数添加以下代码: ```cpp QMenu *menu = new QMenu(this); menu->addAction("Action 1"); menu->addAction("Action 2"); // 添加更多的菜单项... ``` 3. 关联右键菜单和TreeView控件:通过在TreeView控件的contextMenuPolicy属性设置Qt::CustomContextMenu,启用自定义上下文菜单。然后,重写TreeView控件的contextMenuEvent()方法,以显示自定义菜单。在您的窗口类添加以下代码: ```cpp treeView->setContextMenuPolicy(Qt::CustomContextMenu); connect(treeView, &QTreeView::customContextMenuRequested, this, [=](const QPoint &pos) { QContextMenuEvent event(QContextMenuEvent::Mouse, pos); treeView->contextMenuEvent(&event); }); ``` 4. 在contextMenuEvent()方法显示右键菜单重写TreeView控件的contextMenuEvent()方法,并在其显示自定义菜单。在您的窗口类添加以下代码: ```cpp void YourWindowClass::contextMenuEvent(QContextMenuEvent *event) { QPoint pos = event->pos(); QModelIndex index = treeView->indexAt(pos); if (index.isValid()) { QMenu *menu = new QMenu(this); menu->addAction("Action 1"); menu->addAction("Action 2"); // 添加更多的菜单项... menu->exec(treeView->viewport()->mapToGlobal(pos)); } } ``` 这样,您就可以在TreeView控件上右键单击,并显示自定义的右键菜单了。根据您的需求,您可以根据TreeView的选定项的位置,添加相应的操作。 希望对您有所帮助!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值