QTableView添加右键菜单

一、头文件

首先在头文件添加菜单、菜单项、槽函数

QMenu *tableviewMenue;//菜单,需要头文件
QAction *Action1;//菜单项,需要头文件
QAction *Action2;

public slots:
    void Action1_Slot();//菜单项槽函数
    void Action2_Slot();
    void Men_Slot(QPoint p);//右键菜单槽函数

二、cpp文件

1、构造函数中

tableview->setContextMenuPolicy(Qt::CustomContextMenu);//必须设置
tableviewMenu = new QMenu(tableview);
Action1 = new QAction("Action1",tableview);
Action2 = new QAction("Action2",tableview);

tableviewMenu->addAction(Action1);
tableviewMenu->addAction(Action2);

connect(Action1,SIGNAL(triggered()),this,SLOT(appendAction_triggered()));
connect(Action2,SIGNAL(triggered()),this,SLOT(prependAction_triggered()));
connect(tableview,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(Men_Slot(QPoint)));

2、Action1_Slot()、Action2_Slot()这两个是右键菜单添加的功能实现,如常见的拷贝、粘贴、剪切等功能,这里需要自己实现

下面是Men_Slot(QPoint p)槽函数的实现

void Men_Slot(QPoint p)
{
    QModelIndex index = tableview->indexAt(p);//获取鼠标点击位置项的索引
    if(index.isValid())//数据项是否有效,空白处点击无菜单
    {
        QItemSelectionModel* selections = view->selectionModel();//获取当前的选择模型
        QModelIndexList selected = selections->selectedIndexes();//返回当前选择的模型索引
        if(selected.count() ==1) //选择单个项目时的右键菜单显示Action1
        {
            Action1->setVisible(true);
        }
        else   //如果选中多个项目,则右键菜单显示Action2
        {
            Action2->setVisible(true);
        }
        tableviewMenu->exec(QCursor::pos());//数据项有效才显示菜单
    }
}

点击查看更多关于右键菜单介绍

你可能感兴趣的:(Qt,qt,c++)