最近需要对按钮实现效果:当鼠标按下时按钮有效果1,然后鼠标松开时按钮有效果2。
分析:这里没有现成的信号可以使用,需要重载mousePressEvent 及 mouseReleaseEvent 事件函数,在mouseReleaseEvent 函数中检查鼠标是否在按钮中,若是,则发送点击事件。以下为版本一实现:
void testbutton::mousePressEvent(QMouseEvent *e)
{
//效果1实现代码
}
void testbutton::mouseReleaseEvent(QMouseEvent *e)
{
//效果2实现代码
//鼠标释放时如果仍在按钮内部,发送click信号,注意这里e->pos返回的是相对于按钮起始位置的位置
if (this->bIsPointInRect(e->pos(), QRect(0, 0, this->width(), this->height())))
{
emit clicked();
}
}
void testbutton::mousePressEvent(QMouseEvent *e)
{
QPushButton::mousePressEvent(e);
if (e->isAccepted())
{
//效果1实现代码
}
}
void testbutton::mouseReleaseEvent(QMouseEvent *e)
{
QPushButton::mouseReleaseEvent(e);
if (e->isAccepted())
{
//效果2实现代码
}
}