一、前言
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、运行效果
从左到右,依次为理想效果,有下拉三角效果,去三角效果