Qt Tooltip详解

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。

看以下代码示例: ide

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转过来的人,以为真别扭。
相关文章
相关标签/搜索