Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# Advanced use of tool tips

This example widget demonstrates how to use tool tips for static and dynamic regions within a widget.

It displays two blue and one red rectangle. The blue ones move every time you click on them, the red one is static. There are dynamic tool tips on the blue rectangles and a static tool tip on the red one.

Header file:

    /****************************************************************************
    ** $Id: qt/tooltip.h   3.3.8   edited Jan 11 14:37 $
    **
    ** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
    **
    ** This file is part of an example program for TQt.  This example
    ** program may be used, distributed and modified without limitation.
    **
    *****************************************************************************/

    #include <ntqwidget.h>
    #include <ntqtooltip.h>

    class DynamicTip : public TQToolTip
    {
    public:
        DynamicTip( TQWidget * parent );

    protected:
        void maybeTip( const TQPoint & );
    };

    class TellMe : public TQWidget
    {
        TQ_OBJECT
    public:
        TellMe( TQWidget * parent = 0, const char * name = 0 );
        ~TellMe();

        TQRect tip( const TQPoint & );

    protected:
        void paintEvent( TQPaintEvent * );
        void mousePressEvent( TQMouseEvent * );
        void resizeEvent( TQResizeEvent * );

    private:
        TQRect randomRect();

        TQRect r1, r2, r3;
        DynamicTip * t;
    };

Implementation:

    /****************************************************************************
    ** $Id: qt/tooltip.cpp   3.3.8   edited Jan 11 14:37 $
    **
    ** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
    **
    ** This file is part of an example program for TQt.  This example
    ** program may be used, distributed and modified without limitation.
    **
    *****************************************************************************/

    #include "tooltip.h"
    #include <ntqapplication.h>
    #include <ntqpainter.h>
    #include <stdlib.h>

    DynamicTip::DynamicTip( TQWidget * parent )
        : TQToolTip( parent )
    {
        // no explicit initialization needed
    }

    void DynamicTip::maybeTip( const TQPoint &pos )
    {
        if ( !parentWidget()->inherits( "TellMe" ) )
            return;

        TQRect r( ((TellMe*)parentWidget())->tip(pos) );
        if ( !r.isValid() )
            return;

        TQString s;
        s.sprintf( "position: %d,%d", r.center().x(), r.center().y() );
        tip( r, s );
    }

    TellMe::TellMe( TQWidget * parent , const char * name  )
        : TQWidget( parent, name )
    {
        setMinimumSize( 30, 30 );
        r1 = randomRect();
        r2 = randomRect();
        r3 = randomRect();

        t = new DynamicTip( this );

        TQToolTip::add( this, r3, "this color is called red" ); // <- helpful
    }

    TellMe::~TellMe()
    {
        delete t;
        t = 0;
    }

    void TellMe::paintEvent( TQPaintEvent * e )
    {
        TQPainter p( this );

        // I try to be efficient here, and repaint only what's needed

        if ( e->rect().intersects( r1 ) ) {
            p.setBrush( blue );
            p.drawRect( r1 );
        }

        if ( e->rect().intersects( r2 ) ) {
            p.setBrush( blue );
            p.drawRect( r2 );
        }

        if ( e->rect().intersects( r3 ) ) {
            p.setBrush( red );
            p.drawRect( r3 );
        }
    }

    void TellMe::mousePressEvent( TQMouseEvent * e )
    {
        if ( r1.contains( e->pos() ) )
            r1 = randomRect();
        if ( r2.contains( e->pos() ) )
            r2 = randomRect();
        repaint();
    }

    void TellMe::resizeEvent( TQResizeEvent * )
    {
        if ( !rect().contains( r1 ) )
             r1 = randomRect();
        if ( !rect().contains( r2 ) )
             r2 = randomRect();
    }

    TQRect TellMe::randomRect()
    {
        return TQRect( ::rand() % (width() - 20), ::rand() % (height() - 20),
                      20, 20 );
    }

    TQRect TellMe::tip( const TQPoint & p )
    {
        if ( r1.contains( p ) )
            return r1;
        else if ( r2.contains( p ) )
            return r2;
        else
            return TQRect( 0,0, -1,-1 );
    }

Main:

    /****************************************************************************
    ** $Id: qt/main.cpp   3.3.8   edited Jan 11 14:37 $
    **
    ** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
    **
    ** This file is part of an example program for TQt.  This example
    ** program may be used, distributed and modified without limitation.
    **
    *****************************************************************************/

    #include <ntqapplication.h>
    #include "tooltip.h"

    int main( int argc, char ** argv )
    {
        TQApplication a( argc, argv );

        TellMe mw;
        mw.setCaption( "TQt Example - Dynamic Tool Tips" );
        a.setMainWidget( &mw );
        mw.show();

        return a.exec();
    }

See also Examples.