Qt Tooltip详解

Posted vancamel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt Tooltip详解相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/niu_gao/article/details/8204425

Qt4中的tooltip与win32中的tooltip有很多不一样的地方,下面来总结一下。

一是不能直在堆或栈中生成QToolTip对象。因为其构造函数为私有。
二是从widget获取的tooltip不是tooltip对象,而是tooltip中的文本。
三是tooltip跟本不是一个widget。所以不把它当作widget用。
四是tooltip类是一个静态类,所以跟本不必生成tooltip对象就可以使用。
五是tooltip类不能被定制,所以不能从它产生各种形状的tooltip窗口。

QtoolTip有两种使用方式:
一是静态tooltip。比如为一个widget设置一个不变的tooltip文本,当鼠标移上去时显示tooltip。此时很简单,只需调用widget的setToolTip()设置文本即可。
二是动态tooltip。也就是一个widget上的tooltip是变化的。此时需要重写QWidget::event()函数,在里面判断事件类型,如果是QEvent::ToolTip,则控制显示的文本的内容,即可实现动态tooltip。

看如下代码示例:

    bool SortingBox::event(QEvent *event)
    
         if (event->type() == QEvent::ToolTip)
             QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
             int index = itemAt(helpEvent->pos());
             if (index != -1)
                 QToolTip::showText(helpEvent->globalPos(), shapeItems[index].toolTip());
             else
                 QToolTip::hideText();
                 event->ignore();
            
     
             return true;
        
         return QWidget::event(event);
    

可以看到,是调用 QtoolTip::showText()在某个位置显示tooltip文本。

那么,如果想随时显示tooltip,该怎么做呢?其实十分简单:直接调用QToolTip::showText(),指定要显示的位置就行了。因为tooltip类的函数跟本就相当于全局函数而已。

呵呵,其实很简单,但从win32转过来的人,觉得真别扭。


 

以上是关于Qt Tooltip详解的主要内容,如果未能解决你的问题,请参考以下文章

Qt QAction ToolTip显示问题,禁止toolbar上默认显示的tooltip

Qt Tooltip如何防止文本在内置延迟后消失?

QAbstractItemView为截断的项显示ToolTip(使用事件过滤)

qt的托盘程序无法在ubuntu上进行显示tooltip

Qt Creator 鼠标悬浮信号怎么生成?就像MFC里的OVERMOUSE。

bootstrap tooltip放在table里无效