c++qtqt5qplaintexteditqtooltip

how to create tooltip for highlighted strings in QPlainTextEdit


I have a QPlainTextEdit and have some words highlighted in it. Now, when I hover over it with the mouse, I want it to show me a tooltip that has a description or something like that about this highlighted word. Something like this in the Qt IDE:

enter image description here

but I don't know how to start this so any idea, code or similar project to check would be helpful.


Solution

  • For this case I will create a class that inherits from QPlainTextEdit, reimplement the event() method and enable mouse tracking with setMouseTracking()

    plaintextedit.h

    #ifndef PLAINTEXTEDIT_H
    #define PLAINTEXTEDIT_H
    
    #include <QPlainTextEdit>
    
    class PlainTextEdit : public QPlainTextEdit
    {
    public:
        PlainTextEdit(QWidget *parent=0);
    
        bool event(QEvent *event);
    };
    
    #endif // PLAINTEXTEDIT_H
    

    plaintextedit.cpp

    #include "plaintextedit.h"
    #include <QToolTip>
    
    
    PlainTextEdit::PlainTextEdit(QWidget *parent):QPlainTextEdit(parent)
    {
        setMouseTracking(true);
    }
    
    bool PlainTextEdit::event(QEvent *event)
    {
        if (event->type() == QEvent::ToolTip)
        {
            QHelpEvent* helpEvent = static_cast<QHelpEvent*>(event);
            QTextCursor cursor = cursorForPosition(helpEvent->pos());
            cursor.select(QTextCursor::WordUnderCursor);
            if (!cursor.selectedText().isEmpty())
                QToolTip::showText(helpEvent->globalPos(), /*your text*/QString("%1 %2").arg(cursor.selectedText()).arg(cursor.selectedText().length()) );
    
            else
                QToolTip::hideText();
            return true;
        }
        return QPlainTextEdit::event(event);
    }
    

    Complete Code: Here