QT基础(八) 三态按钮设计
三态按钮(普通态,鼠标停留态,点击态)在设计炫丽界时是很常用的一项功能,但QT并没有直接支持这个功能,只好自己写一个了,通过继承QToolButton实现。
上代码:
[cpp]view plaincopyprint?
#include<QtGui>
classCoolButton:publicQToolButton
{
Q_OBJECT
private:
QIconm_NormalIcon;
QIconm_FocusIcon;
QIconm_PressedIcon;
protected:
voidenterEvent(QEvent*event);
voidleaveEvent(QEvent*event);
voidmousePressEvent(QMouseEvent*event);
voidmouseReleaseEvent(QMouseEvent*event);
public:
CoolButton(QWidget*parent=0);
virtual~CoolButton();
voidSetButtonIcons(constQIcon&normal,
constQIcon&focus=QIcon(),
constQIcon&pressed=QIcon());
};
CoolButton::CoolButton(QWidget*parent)
:QToolButton(parent)
{
//为了让图标看起来自然一点而设置了这两个操作
setDown(false);
setFocusPolicy(Qt::NoFocus);
}
CoolButton::~CoolButton()
{
}
//重载“进入”和“离开”事件,进入时切换为另一个图标,离开时还原
voidCoolButton::enterEvent(QEvent*event)
{
if(isEnabled()&&!m_FocusIcon.isNull())
setIcon(m_FocusIcon);
}
voidCoolButton::leaveEvent(QEvent*event)
{
if(isEnabled())
setIcon(m_NormalIcon);
}
//重载鼠标事件
voidCoolButton::mousePressEvent(QMouseEvent*event)
{
if(isEnabled()&&!m_PressedIcon.isNull())
setIcon(m_PressedIcon);
QToolButton::mousePressEvent(event);
}
voidCoolButton::mouseReleaseEvent(QMouseEvent*event)
{
if(isEnabled()&&m_FocusIcon.isNull())
setIcon(m_FocusIcon);
QToolButton::mouseReleaseEvent(event);
}
voidCoolButton::SetButtonIcons(constQIcon&normal,
constQIcon&focus,constQIcon&pressed)
{
m_NormalIcon=normal;
m_FocusIcon=focus;
m_PressedIcon=pressed;
setIcon(m_NormalIcon);
}
#include"main.moc"
intmain(intargc,char**argv)
{
QApplicationapp(argc,argv);
CoolButton*button=newCoolButton;
//QObject::connect(button,SIGNAL(clicked()),qApp,SLOT(quit()));
button->setIconSize(QSize(40,40));
button->SetButtonIcons(QIcon("normal.png"),QIcon("focus.png"),QIcon("pressed.png"));
button->show();
returnapp.exec();
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。