QT QPushButton点击事件的实现
2015-11-19 11:09
741 查看
最近需要对按钮实现效果:当鼠标按下时按钮有效果1,然后鼠标松开时按钮有效果2。
分析:这里没有现成的信号可以使用,需要重载mousePressEvent 及 mouseReleaseEvent 事件函数,在mouseReleaseEvent 函数中检查鼠标是否在按钮中,若是,则发送点击事件。以下为版本一实现:
这样造轮子显然是不高效的,并且代码也比较丑陋,QPushButton继承自QAbstractButton,在QAbstractButton中有更好的mousePressEvent 及 mouseReleaseEvent 实现,可以发现鼠标点击事件的原理跟版本一是类似的。以下为版本二的实现:
分析:这里没有现成的信号可以使用,需要重载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实现代码 } }
相关文章推荐
- Ⅰ.2.6.8 如何测试QTable (Qt 3)
- QTextEidt添加图片
- QTextEidt添加图片 拖动图片
- QTextEdit中添加图片
- Ⅰ.2.6.7 如何测试QListView (Qt 3)
- Qt之窗体透明
- 使用Qt正则表达式提取全路径的文件名
- QT: :QWheelEvent
- QT 应用程序关闭某个窗口时,关闭打开的所有其他窗口并退出程序
- Qt应用程序的发布 exe文件图标设置
- Qt入门-提示、警告、错误、询问、关于对话框
- Qt之操作数据库(SQLite)
- QT 使用全局变量的方法
- qtcreator 程序出现Failed to load platform plugin “windows”的错误
- it could not find or load the Qt platform plugin "windows"
- 我的QT5学习之路(三)——模板库、工具类和控件(中)
- 命令行执行Qt程序
- 命令行执行Qt程序
- Qt程序启动画面播放(gif与swf两种动画格式) - 路上的脚印
- QTCreator项目转移到VS项目步骤、中文乱码解决方案