QT右键菜单

要在某一个窗体中添加右键菜单,比如在QTableView中添加,可以用两种方式。

方式1:使用它的signal函数customContextMenuRequested(QPoint pos),这个信号会在右键点击时发射,将这个信号连接到一个自定义的slot函数中,在这个函数中定义一个右键菜单QMenu,然后根据位置参数pos弹出这个菜单即可。

方式2:重写contextMenuEvent(QContextMenuEvent *event)事件函数,函数中同样使用QMenu来实现。

信号/槽机制是QT的一个中心特征,也是Qt与其他工具包的最不相同的部分,下面是方式1实现一个右键菜单,函数中代码同样适用于方式2:

void MainWindow::on_tableView_customContextMenuRequested(QPoint pos)
{
    QTreeWidgetItem* curItem=ui->treeWidget->itemAt(pos);  //获取当前被点击的节点
    if(curItem==NULL)return;  //这种情况是右键的位置不在treeItem的范围内,即在空白位置右击
    if(0==curItem->data(0,Qt::UserRole))//data(...)返回的data已经在之前建立节点时用setdata()设置好
    {
       QMenu *popMenu =new QMenu(this);//定义一个右键弹出菜单

       popMenu->addAction(ui->action_newDB);//往菜单内添加QAction   该action在前面用设计器定义了
       popMenu->addAction(ui->action_openDB);
       popMenu->addAction(ui->action_delDB);
       popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
    }
    else
    {
        QMenu *popMenu =new QMenu(this);//定义一个右键弹出菜单

        popMenu->addAction(ui->action_newTable);//往菜单内添加QAction,该action在前面用设计器定义了
        popMenu->addAction(ui->action_openTable);
        popMenu->addAction(ui->action_designTable);
        popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
    }
}



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值