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