设置QListWidget属性使其可以显示右键菜单
m_pBookListW->setContextMenuPolicy(Qt::CustomContextMenu);
连接槽函数
connect(m_pBookListW,&QListWidget::customContextMenuRequested,[=](const QPoint& pos)
{
QMenu *pMenu = new QMenu;
QAction *pDelete = new QAction("删除文件", pMenu);
QAction *pDownload = new QAction("下载", pMenu);
QAction *pRename = new QAction("重命名", pMenu);
QAction *pCollect = new QAction("收藏", pMenu);
QAction *pCreateDir = new QAction(QIcon(":/map/createdir.png"),"新建文件夹", pMenu);
QAction *pUpload = new QAction(QIcon(":/map/upload.png"),"上传文件", pMenu);
QAction *pFlush = new QAction(QIcon(":/map/flush_black.png"),"刷新页面", pMenu);
connect(pDelete,SIGNAL(triggered(bool)),this,SLOT(delRegFile()));
connect(pDownload,SIGNAL(triggered(bool)),this,SLOT(downloadFile()));
connect(pRename,SIGNAL(triggered(bool)),this,SLOT(reNameFile()));
connect(pCreateDir,SIGNAL(triggered(bool)),this,SLOT(createDir()));
connect(pUpload,SIGNAL(triggered(bool)),this,SLOT(uploadFile()));
connect(pFlush,SIGNAL(triggered(bool)),this,SLOT(flushFile()));
//当ListWidgetitem不为空时显示菜单
if(m_pBookListW->itemAt(/*mapFromGlobal(QCursor::pos())*/pos)!=NULL)
{
pMenu->addAction(pDelete);
pMenu->addAction(pDownload);
pMenu->addAction(pRename);
pMenu->addAction(pCollect);
}
else
{
pMenu->addAction(pCreateDir);
pMenu->addSeparator(); //添加分隔符
pMenu->addAction(pUpload);
pMenu->addSeparator();
pMenu->addAction(pFlush);
}
//在鼠标位置显示菜单
pMenu->exec(QCursor::pos());
delete pMenu;
});
当右键ListWidgetItem时,先判断Item是否为空,在指定的位置(鼠标点击处)显示菜单。
需要注意的是,pMenu是在函数中new出来的,在结束时需要delete释放。
当为pMenu指定父窗口时而不主动释放时,在析构pMenu时程序异常结束。