先看效果图:
点击toolbutton会出现一个下拉菜单,右键菜单中的每一项会出现编辑,点击编辑会选中选择的菜单,可以实现菜单的重命名。
具体实现代码如下:
//1 将toolButton添加到工具栏
ui->toolBar->addWidget(ui->toolButton);
//2 给工具栏新建一个菜单menu
QMenu *menu = new QMenu(ui->toolButton);
//3 新建一个widgetAction,其父元素是menu
QWidgetAction *widgetAction = new QWidgetAction(menu);
//4 一般情况是给menu添加action,但是action没有右键方法,所以这里换成listwidget
QListWidget *listWidget = new QListWidget;
//5 添加listwidgetitem到listwidget中
for(int i=0; i<14; i++){
QString str = "hahha";
listWidget->addItem(new QListWidgetItem(str + QString::number(i)));
}
//6 设置listwidget右键菜单响应功能
listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
//7 新建右键菜单,右键菜单的父元素是listwidget
QMenu *contextMenu = new QMenu(listWidget);
//8 给listwidget添加右键方法,只有在listwidgetitem上右键才会出现菜单
connect(listWidget, &QListWidget::customContextMenuRequested, [listWidget, contextMenu]
(const QPoint& pos) {
QListWidgetItem* item = listWidget->itemAt(pos);
if (item) {
contextMenu->exec(listWidget->mapToGlobal(pos));
}
});
//9 设置右键菜单的action
QAction* editAction = contextMenu->addAction("编辑");
//10 点击右键菜单
connect(editAction,&QAction::triggered, [=](){
QListWidgetItem* currentItem = listWidget->currentItem();
if (currentItem) {
QString text = currentItem->text();
currentItem->setFlags(currentItem->flags()|Qt::ItemIsEditable);
listWidget->editItem(currentItem);
}
});
//11 将定制的菜单listwidget放入widgetAction中
widgetAction->setDefaultWidget(listWidget);
//12 给menu添加action
menu->addAction(widgetAction);
//13 给toolButton设置下拉菜单
ui->toolButton->setMenu(menu);
如果有什么不对的地方,烦请各位指正,感谢!!