Qt中的QtoolTip有幾個需要注意的:
1、不能直在堆或棧中生成QToolTip對象。因為其構造函數為私有。
2、從widget獲取的tooltip不是tooltip對象,而是tooltip中的文本。
3、tooltip跟本不是一個widget。所以不把它當作widget用。
4、tooltip類是一個靜態類,所以跟本不必生成tooltip對象就可以使用。
5、tooltip類不能被定制,所以不能從它產生各種形狀的tooltip窗口。
QtoolTip有兩種使用方式:
一是靜態tooltip。比如為一個widget設置一個不變的tooltip文本,當鼠標移上去時顯示tooltip。此時很簡單,只需調用widget的setToolTip()設置文本即可。
二是動態tooltip。也就是一個widget上的tooltip是變化的。此時需要重寫QWidget::event()函數,在里面判斷事件類型,如果是QEvent::ToolTip,則控制顯示的文本的內容,即可實現動態tooltip。
看如下代碼示例:
//這段代碼重寫了控件(QTextEdit)的event方法,捕獲ToolTip事件,將鼠標下的單詞取出,進行ToolTip顯示! bool event(QEvent* event) { if(event->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast (event); QTextCursor cursor = cursorForPosition(helpEvent->pos()); cursor.select(QTextCursor::WordUnderCursor); QToolTip::showText(helpEvent->globalPos(), cursor.selectedText()); return true; } return QTextEdit::event(event); }
這里如果想要修改ToolTip的顯示樣式,這可以使用html樣式格式來操作:
"<b style=\"background:%s;color:white;\">%s</b>"
將上述代碼用作QToolTip::showText()方法的第二個參數。
bool event(QEvent* event) { if(event->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast (event); QTextCursor cursor = cursorForPosition(helpEvent->pos()); cursor.select(QTextCursor::WordUnderCursor); QString st = "<b style=\"background:%s;color:white;\">%1</b>"; QToolTip::showText(helpEvent->globalPos(), st.arg(cursor.selectedText())); return true; } return QTextEdit::event(event); }