您的位置:首页 > 编程语言 > Qt开发

QT QPushButton点击事件的实现

2015-11-19 11:09 741 查看
最近需要对按钮实现效果:当鼠标按下时按钮有效果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();
}
}


这样造轮子显然是不高效的,并且代码也比较丑陋,QPushButton继承自QAbstractButton,在QAbstractButton中有更好的mousePressEvent 及 mouseReleaseEvent 实现,可以发现鼠标点击事件的原理跟版本一是类似的。以下为版本二的实现:
void testbutton::mousePressEvent(QMouseEvent *e)
{
QPushButton::mousePressEvent(e);
if (e->isAccepted())
{
//效果1实现代码
}
}

void testbutton::mouseReleaseEvent(QMouseEvent *e)
{
QPushButton::mouseReleaseEvent(e);
if (e->isAccepted())
{
//效果2实现代码
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: