⼀、前⾔
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、运⾏效果
从左到右,依次为理想效果,有下拉三⾓效果,去三⾓效果
因篇幅问题不能全部显示,请点此查看更多更全内容