QT QPushButton点击事件的实现

原创 2015年11月19日 11:09:43

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


相关文章推荐

Qt--02:设置父对象

问题引入:在Widget中创建Button等控件时,如果不指定Button等控件的父对象,就会产生相关控件无法再此Widget窗口中显示。因此当一些控件需要在当前Widget窗口中显示的时候就需要为控...
  • feikon2
  • feikon2
  • 2017年04月10日 19:53
  • 386

构造函数方法创建Mat对象

Mat是一个非常优秀的图像类,它同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵。Mat类提供了一系列构造函数,可以方便的根据需要创建Mat对象。 常用的构造函数有:  1、Mat::M...

QT编程 之 为Label添加点击事件

在使用QT编程过程中发现QLabel没有点击事件,很多想法就不能很好的实现。经过搜索和实践,分享一个兼容性更好,更灵活的方法- - - -重写QLabel。 简单的说就是写一个子类,继承自QLab...

Button点击事件的四种实现

  • 2016年06月13日 19:51
  • 7.96MB
  • 下载

Qt4.8.2 QPushButton按钮贴图以及实现按钮的几种常用状态

一、继承自QPushButton,不改变图片本身,而是通过改变按钮背景的透明度 myPushButton.h #ifndef MYPUSHBUTTON_H #define MYPUSHBUTTON...

WebView实现JS效果和a标签点击事件

  • 2016年12月08日 18:09
  • 185KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT QPushButton点击事件的实现
举报原因:
原因补充:

(最多只允许输入30个字)