Qt4中的tooltip與win32中的tooltip有很多不一樣的地方,下面來總結(jié)一下。
一是不能直在堆或棧中生成QToolTip對象。因?yàn)槠錁?gòu)造函數(shù)為私有。
二是從widget獲取的tooltip不是tooltip對象,而是tooltip中的文本。
三是tooltip跟本不是一個widget。所以不把它當(dāng)作widget用。
四是tooltip類是一個靜態(tài)類,所以跟本不必生成tooltip對象就可以使用。
五是tooltip類不能被定制,所以不能從它產(chǎn)生各種形狀的tooltip窗口。
QtoolTip有兩種使用方式:
一是靜態(tài)tooltip。比如為一個widget設(shè)置一個不變的tooltip文本,當(dāng)鼠標(biāo)移上去時顯示tooltip。此時很簡單,只需調(diào)用widget的setToolTip()設(shè)置文本即可。
二是動態(tài)tooltip。也就是一個widget上的tooltip是變化的。此時需要重寫QWidget::event()函數(shù),在里面判斷事件類型,如果是QEvent::ToolTip,則控制顯示的文本的內(nèi)容,即可實(shí)現(xiàn)動態(tài)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);
- }
可以看到,是調(diào)用 QtoolTip::showText()在某個位置顯示tooltip文本。
那么,如果想隨時顯示tooltip,該怎么做呢?其實(shí)十分簡單:直接調(diào)用QToolTip::showText(),指定要顯示的位置就行了。因?yàn)閠ooltip類的函數(shù)跟本就相當(dāng)于全局函數(shù)而已。
呵呵,其實(shí)很簡單,但從win32轉(zhuǎn)過來的人,覺得真別扭。