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轉過來的人,以爲真彆扭。
相關文章
相關標籤/搜索