Qt按钮添加菜单

一、前言

  Qt中给某个按钮添加菜单有多种方式,可以左键点击弹出菜单,也可以通过绑定customContextMenuRequested(const QPoint&)信号,使用CustomContextMenu方式右键弹出菜单;

本人在使用左键弹出菜单时,发现会有下拉三角,影响美观,故整理了下去除下拉三角的方法

二、去除按钮设置菜单后的下拉三角

  1、采用样式去除(缺点:下拉三角被隐藏,但依旧会占空间,文本不居中)

  //不显示图片

  m_PushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");

  2、采用槽函数,手动显示Menu方式

  思路:即绑定按钮的槽函数,在槽函数中新建QMenu,并设置位置,然后显示菜单

  1)构造时创建显示菜单

 1 //构造函数调用,创建菜单
 2 void Widget::initMenu()
 3 {
 4     menu = new QMenu(this);
 5     menu->setWindowFlags(menu->windowFlags() | Qt::FramelessWindowHint);
 6     //menu->setAttribute(Qt::WA_TranslucentBackground);
 7     menu->setObjectName("senMenu");
 8     sendAction = menu->addAction("Selected line");
 9     ctrlAction = menu->addAction("Changed direction");
10 
11     ui->pushButton->setCheckable(true);
12     ui->pushButton_2->setMenu(menu);
13     ui->pushButton_3->setMenu(menu);
14     //影藏三角形,但依旧会占右侧空间,字体不居中
15     ui->pushButton_3->setStyleSheet("QPushButton:menu-indicator{image:none;}");
16 }
构造时创建菜单

  2)槽函数中计算显示位置

 1 //按钮槽函数
 2 void Widget::menuSlot()
 3 {
 4     QPoint pos = ui->pushButton->pos();
 5 
 6     pos.setX(pos.x() + 1);
 7     pos.setY(pos.y() + ui->pushButton->height() - 1);
 8     //计算菜单位置
 9     menu->exec(mapToGlobal(pos));
10 }
显示位置计算

  3、运行效果

  从左到右,依次为理想效果,有下拉三角效果,去三角效果

  

  

posted @ 2021-07-08 19:41  凉天满月  阅读(2493)  评论(0编辑  收藏  举报