qtooltip源码学习
2016-01-14 15:10
344 查看
最近由于工作需要,分析了qt源码中qtooltip的源码,有些收获,记录一下,供日后查阅。
qtooltip源码路径:qt-everywhere-opensource-src-4.8.0\qt-everywhere-opensource-src-4.8.0\src\gui\kernel\qtooltip.cpp.
我们使用时,用的是QToolTip,但是实际上QTipLabel才是核心。QTipLabel继承自QLabel,显示外观设置也使用QLabel的各种函数进行设置。如果想要实现自己的tooptip,可以将此类拿出来修改一下使用。
QTipLabel通过定时器、鼠标事件控制tip的显示隐藏。
定时时间:10000+40*qMax(0,text().length()-100)ms
从上述表达式可以看出,tip的显示时间10秒多,根据文本内容长度有区别。显示时间长短不可以修改,也没有接口设置。
我们使用QLabel实现了自己的tooltip,但是显示效果与QTooltip有区别,查看了源码才发现是有很多属性没有设置,比如,我们的问题显示紧靠下边,发现是下面的属性没有设置:
setMargin(1+style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this));
这个设置是我要查看源码的初衷,因为测试提出我们的label太窄了,天杀的测试!
另一个收获是发现这个类中使用的定时器不是QTimer,而是QBasicTimer,于是顺便看了一下这两个类的区别。
QBasicTimer是轻量级的定时器,不继承自QObject,所以没有信号、槽,但是在QObject的派生类的timerEvent函数中可以捕获这个定时器的消息,增加自己的处理。方便快捷。少了信号和槽,直接是事件了,应该在响应速度上会更快。
qtooltip源码路径:qt-everywhere-opensource-src-4.8.0\qt-everywhere-opensource-src-4.8.0\src\gui\kernel\qtooltip.cpp.
我们使用时,用的是QToolTip,但是实际上QTipLabel才是核心。QTipLabel继承自QLabel,显示外观设置也使用QLabel的各种函数进行设置。如果想要实现自己的tooptip,可以将此类拿出来修改一下使用。
QTipLabel通过定时器、鼠标事件控制tip的显示隐藏。
定时时间:10000+40*qMax(0,text().length()-100)ms
从上述表达式可以看出,tip的显示时间10秒多,根据文本内容长度有区别。显示时间长短不可以修改,也没有接口设置。
我们使用QLabel实现了自己的tooltip,但是显示效果与QTooltip有区别,查看了源码才发现是有很多属性没有设置,比如,我们的问题显示紧靠下边,发现是下面的属性没有设置:
setMargin(1+style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this));
这个设置是我要查看源码的初衷,因为测试提出我们的label太窄了,天杀的测试!
另一个收获是发现这个类中使用的定时器不是QTimer,而是QBasicTimer,于是顺便看了一下这两个类的区别。
QBasicTimer是轻量级的定时器,不继承自QObject,所以没有信号、槽,但是在QObject的派生类的timerEvent函数中可以捕获这个定时器的消息,增加自己的处理。方便快捷。少了信号和槽,直接是事件了,应该在响应速度上会更快。
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- WinForm ToolTip使用方法小结
- DevExpress实现自定义TreeListNode的Tooltip的方法
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- 使用css实现全兼容tooltip提示框
- 用svg制作富有动态的tooltip
- Qt for Android开发实例教程
- Java编程中应用的GUI设计基础
- Python Tkinter GUI编程入门介绍
- python开发之IDEL(Python GUI)的使用方法图文详解
- 基于wxpython开发的简单gui计算器实例
- Python中使用Tkinter模块创建GUI程序实例
- 基于wxpython实现的windows GUI程序实例
- QModelIndex/Role/Model介紹<二>
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- egret笔记之gui内设置动画效果
- 关于Egret Engine 2.5.3引入GUI模块问题记录