Qt中修改QtoolTip的樣式


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); 
}

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM