功能截图:
主窗口的listwidget控件中有两个写好的item:“book”“heart”。
在item右键弹出菜单,有“new”“delete”两个action可以选择。
在listwidget非item的空白处右键弹出的菜单,只有“new”一个action可以选择。
如上两张图所示的操作,结果为:
代码实现:
1、给listwidget控件添加两个item:
ui->listWidget->addItem("book");
ui->listWidget->addItem("heart");
2、设置菜单策略,支持右键菜单:
ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
3、事件处理:
//处理右键事件
connect(ui->listWidget,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(OnListContextMenu(const QPoint &)));
//处理两个action——“new”、“delete”事件
connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(Onactionnew()));
connect(ui->actionDelete,SIGNAL(triggered()),this,SLOT(Onactiondelete()));
4、槽函数:
int MainWindow::OnListContextMenu(const QPoint & pt)
{
QListWidgetItem *selected=ui->listWidget->itemAt(pt);\
int row=ui->listWidget->currentRow();
QMenu *menu=new QMenu();
menu->addAction(ui->actionNew);
if(selected)
{ menu->addAction(ui->actionDelete); }
QPoint p=ui->listWidget->mapToGlobal(pt);
menu->exec(p);
return 0;
}
int MainWindow::Onactionnew()
{
QListWidgetItem* item = new QListWidgetItem();
item->setText("new item");
ui->listWidget->addItem(item);
return 0;
}
int MainWindow::Onactiondelete()
{
int row=ui->listWidget->currentRow();
QListWidgetItem *item=ui->listWidget->takeItem(row);
if(item)
{
delete item;
}
return 0;
}