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轉過來的人,覺得真別扭。