QT右键菜单

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Toormi/article/details/50678619
要在某一个窗体中添加右键菜单,比如在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());//弹出右键菜单,菜单位置为光标位置
    }
}



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页