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、運行效果

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

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM