1、直接使用 m_pBtn->setMenu(m_pMenu); 这样会在按键右侧形成一个三角符号,需要在样式表内设置 image:none; 来取消
2、先创建好状态菜单(不显示),然后用连接来连接按键与菜单的显示方法,这样就不用setMenu然后再去取消三角符号。
.H
#ifndef BTN_MENU_H #ifndef BTN_MENU_H#define BTN_MENU_H
#include <QWidget>
#include <QPushButton>
#include <QMenu>
class Btn_Menu : public QWidget
{
Q_OBJECT
public:
explicit Btn_Menu(QWidget *parent = 0);
signals:
public slots:
void show_Menu();
void busyProc();
void hideProc();
void awayProc();
void onlineProc();
void QmeProc();
void notdistrubProc();
private:
void createBtn_Menu(); private:
QPushButton *m_pMenuBtn;
QMenu *m_pBtnMenu;
};
#endif // BTN_MENU_H
.cpp
#include "btn_menu.h" Btn_Menu::Btn_Menu(QWidget *parent) : QWidget(parent),m_pMenuBtn(0),m_pBtnMenu(0)
{
this->resize(200,120);
m_pMenuBtn = new QPushButton(this);
m_pMenuBtn->setFixedSize(13,13);
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_away.png"));
createBtn_Menu();
connect(m_pMenuBtn,SIGNAL(clicked()),this,SLOT(show_Menu()));
}
void Btn_Menu::createBtn_Menu() { //只创建不显示,需要的时候调用显示方法
m_pBtnMenu = new QMenu(this);
QAction *t_pAction1 = new QAction(QIcon("Resources/LoginState/state_away.png"),"离开",this);
m_pBtnMenu->addAction(t_pAction1);
QAction *t_pAction2 = new QAction(QIcon("Resources/LoginState/state_busy.png"),"繁忙",this);
m_pBtnMenu->addAction(t_pAction2);
QAction *t_pAction3 = new QAction(QIcon("Resources/LoginState/state_hide.png.pn"),"隐藏",this);
m_pBtnMenu->addAction(t_pAction3);
QAction *t_pAction4 = new QAction(QIcon("Resources/LoginState/state_notdisturb.png"),"请勿打扰",this);
m_pBtnMenu->addAction(t_pAction4);
QAction *t_pAction5 = new QAction(QIcon("Resources/LoginState/state_online.png"),"在线",this);
m_pBtnMenu->addAction(t_pAction5);
QAction *t_pAction6 = new QAction(QIcon("Resources/LoginState/state_Qme.png"),"Qme",this);
m_pBtnMenu->addAction(t_pAction6);//非全局的只能在此处链接,是全局的话可以在外链接
connect(t_pAction1,SIGNAL(triggered(bool)),this,SLOT(awayProc()));
connect(t_pAction2,SIGNAL(triggered(bool)),this,SLOT(busyProc()));
connect(t_pAction3,SIGNAL(triggered(bool)),this,SLOT(hideProc()));
connect(t_pAction4,SIGNAL(triggered(bool)),this,SLOT(notdistrubProc()));
connect(t_pAction5,SIGNAL(triggered(bool)),this,SLOT(onlineProc()));
connect(t_pAction6,SIGNAL(triggered(bool)),this,SLOT(QmeProc()));
} void Btn_Menu::show_Menu() {
m_pBtnMenu->show();
m_pBtnMenu->exec(QCursor::pos());
}
void Btn_Menu::busyProc() {
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_busy.png"));
}
void Btn_Menu::hideProc()
{
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_hide.png"));
}
void Btn_Menu::awayProc()
{
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_away.png"));
}
void Btn_Menu::onlineProc()
{
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_online.png"));
}
void Btn_Menu::QmeProc()
{
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_Qme.png"));
}
void Btn_Menu::notdistrubProc()
{
m_pMenuBtn->setIcon(QIcon("Resources/LoginState/state_notdisturb.png"));
}