QT 实现对toolButton菜单的编辑

先看效果图:

 点击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);

如果有什么不对的地方,烦请各位指正,感谢!! 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值