資源簡(jiǎn)介
Qt 之QToolButton 實(shí)現(xiàn)QQ界面按鈕效果、重新設(shè)置QToolButton菜單按鈕區(qū)域的新功能。

代碼片段和文件信息
#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右邊菜單按鈕的區(qū)域;
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方法?原來(lái)的實(shí)現(xiàn)
this->setChecked(true);
if?(isChecked())
{
showMenuArrow();
// this->setMenu(m_menu);
}
else
{
hideMenuArrow();
// this->setMenu(
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4200??2016-08-23?09:50??MyToolButton.cpp
?????文件????????814??2016-08-23?09:51??MyToolButton.h
-----------?---------??----------?-----??----
?????????????????5014????????????????????2
評(píng)論
共有 條評(píng)論