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事件处理(以按钮为例子)

QT事件处理步骤其实和java的事件处理一样。 步骤为 1.为
  • bojie5744
  • bojie5744
  • 2014年06月14日 10:54
  • 3217

Qt学习之给QPushButton添加菜单CustomContextMenu方法

上篇也说了,题目虽然说是给QPushButton添加鼠标右键菜单,其实对于所有的QWidget都是适用的。之所以说QPushButton,是以QPushButton为例进行实现,写的类继承自QPush...
  • u011417605
  • u011417605
  • 2016年03月19日 12:58
  • 4784

Qt 之 自定义按钮 在鼠标 悬浮、按下、松开后的效果

一、简述在上一篇 Qt 之 去除窗口部件被选中后的焦点虚线框 中,我们为了去除焦点虚线框,给按钮的样式加上了如下的样式。QPushButton { background:red; bo...
  • GoForwardToStep
  • GoForwardToStep
  • 2016年12月05日 15:28
  • 10096

基于Qt的OpenGL编程并能实现相应按钮点击事件

  • 2017年09月13日 21:00
  • 1.75MB
  • 下载

QT一个简单的例子,对话框点击事件

  • 2011年04月20日 23:38
  • 2KB
  • 下载

029集-Activity、内部类、外部类实现点击事件响应

  • 2015年10月25日 14:29
  • 41.02MB
  • 下载

Button点击事件的四种实现

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

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

  • 2016年12月08日 18:09
  • 185KB
  • 下载

SwipeRefreshView实现下拉刷新,上拉加载并实现条目点击事件

  • 2017年03月15日 16:44
  • 25.93MB
  • 下载

RecyclerView加载不同item并实现其item点击事件,实现添加常用应用的功能demo

  • 2017年05月16日 00:23
  • 13.25MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT QPushButton点击事件的实现
举报原因:
原因补充:

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