关闭

QT QPushButton点击事件的实现

标签: QTQPUSHBUTTON点击事件
5170人阅读 评论(0) 收藏 举报
分类:

最近需要对按钮实现效果:当鼠标按下时按钮有效果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实现代码
	}
}


1
2

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18186次
    • 积分:360
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论