资源简介

Qt 之QToolButton 实现QQ界面按钮效果、重新设置QToolButton菜单按钮区域的新功能。

资源截图

代码片段和文件信息

#include “mytoolbutton.h“
#include yleOption>
#include 
#include 
#include 
#include 
#include 

MyToolButton::MyToolButton(QWidget *parent  QString strIcon)
: QToolButton(parent)
 m_strIcon(strIcon)
{
initControl();
initMenu();
}

MyToolButton::~MyToolButton()
{

}

void MyToolButton::initControl()
{
this->setCheckable(true);
this->setPopupMode(QToolButton::MenuButtonPopup);
this->setFixedSize(QSize(45 34));
this->setstyleSheet(QString(“QToolButton\
{\
  border-image: url(%1) 0 0 68 0;\
}\
QToolButton:hover\
{\
border-image: url(%1) 34 0 34 0;\
}\
QToolButton:pressedQToolButton:checked\
{\
border-image: url(%1) 68 0 0 0;\
}\
QToolButton::menu-arrow\
{\
border:none\
}\
QToolButton::menu-indicator{\
image: none;\
}\
QToolButton::menu-button\
{\
background-image:url(:/Resources/toolButton_arrow_tranparent.png);\
}\
QToolButton::menu-button:pressed\
{\
background-image:url(:/Resources/toolButton_arrow.png);\
}“).arg(m_strIcon));
connect(this SIGNAL(pressed()) this SLOT(onMousePress()));
connect(this SIGNAL(clicked()) this SLOT(onMouseClicked()));
connect(this SIGNAL(released()) this SLOT(onMouseRelease()));
connect(this SIGNAL(signalToolMenuClicked()) this SLOT(onToolMenuClicked()));

}

void MyToolButton::initMenu()
{
  m_menu = new QMenu(this);
  QAction* actionOne = m_menu->addAction(“one“);
  QAction* actionTwo = m_menu->addAction(“two“);
}

void MyToolButton::enterEvent(QEvent *event)
{
if (this->isChecked())
{
showMenuArrow();
}
QToolButton::enterEvent(event);
}

void MyToolButton::leaveEvent(QEvent *event)
{
hideMenuArrow();
QToolButton::leaveEvent(event);
}

void MyToolButton::mousePressEvent(QMouseEvent *event)
{
QstyleOptionToolButton styleIOption;
initstyleOption(&styleIOption);
if (Qt::LeftButton == event->button() && MenuButtonPopup == popupMode())
{
// 获取QToolButton右边菜单按钮的区域;
QRect popupButtonRect = style()->subControlRect(Qstyle::CC_ToolButton &styleIOption Qstyle::SC_ToolButtonMenu this);
if (popupButtonRect.isValid() && popupButtonRect.contains(event->pos()))
{
if (this->isChecked())
{
//m_menu->exec(event->globalPos());
emit signalToolMenuClicked();
}


}
}
qDebug() << “this is mousePressEvent Fuction“;
QToolButton::mousePressEvent(event);
}

void MyToolButton::mouseReleaseEvent(QMouseEvent *event)
{
qDebug() << “this is mouseReleaseEvent Fuction“;
QToolButton::mouseReleaseEvent(event);
}

void MyToolButton::nextCheckState()
{
// setChecked(!isChecked()); // nextCheckState方法 原来的实现
this->setChecked(true);
if (isChecked())
{
showMenuArrow();
// this->setMenu(m_menu);
}
else
{
hideMenuArrow();
// this->setMenu(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4200  2016-08-23 09:50  MyToolButton.cpp

     文件        814  2016-08-23 09:51  MyToolButton.h

----------- ---------  ---------- -----  ----

                 5014                    2


评论

共有 条评论