您的位置:首页 > 编程语言 > Qt开发

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函数中可以捕获这个定时器的消息,增加自己的处理。方便快捷。少了信号和槽,直接是事件了,应该在响应速度上会更快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt tooltip gui