/**************************************************************************** ** $Id: qt/examples/tooltip/tooltip.h 2.2.1 edited 2000-08-31 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include <qwidget.h> #include <qtooltip.h> class DynamicTip : public QToolTip { public: DynamicTip( QWidget * parent ); protected: void maybeTip( const QPoint & ); }; class TellMe : public QWidget { Q_OBJECT public: TellMe( QWidget * parent = 0, const char * name = 0 ); ~TellMe(); QRect tip( const QPoint & ); protected: void paintEvent( QPaintEvent * ); void mousePressEvent( QMouseEvent * ); void resizeEvent( QResizeEvent * ); private: QRect randomRect(); QRect r1, r2, r3; DynamicTip * t; };
/**************************************************************************** ** $Id: qt/examples/tooltip/tooltip.cpp 2.2.1 edited 2000-08-31 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "tooltip.h" #include <qapplication.h> #include <qpainter.h> #include <stdlib.h> DynamicTip::DynamicTip( QWidget * parent ) : QToolTip( parent ) { // no explicit initialization needed } void DynamicTip::maybeTip( const QPoint &pos ) { if ( !parentWidget()->inherits( "TellMe" ) ) return; QRect r( ((TellMe*)parentWidget())->tip(pos) ); if ( !r.isValid() ) return; QString s; s.sprintf( "position: %d,%d", r.center().x(), r.center().y() ); tip( r, s ); } TellMe::TellMe( QWidget * parent , const char * name ) : QWidget( parent, name ) { setMinimumSize( 30, 30 ); r1 = randomRect(); r2 = randomRect(); r3 = randomRect(); t = new DynamicTip( this ); QToolTip::add( this, r3, "this color is called red" ); // <- helpful } TellMe::~TellMe() { delete t; t = 0; } void TellMe::paintEvent( QPaintEvent * e ) { QPainter 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( QMouseEvent * e ) { if ( r1.contains( e->pos() ) ) r1 = randomRect(); if ( r2.contains( e->pos() ) ) r2 = randomRect(); repaint(); } void TellMe::resizeEvent( QResizeEvent * ) { if ( !rect().contains( r1 ) ) r1 = randomRect(); if ( !rect().contains( r2 ) ) r2 = randomRect(); } QRect TellMe::randomRect() { return QRect( ::rand() % (width() - 20), ::rand() % (height() - 20), 20, 20 ); } QRect TellMe::tip( const QPoint & p ) { if ( r1.contains( p ) ) return r1; else if ( r2.contains( p ) ) return r2; else return QRect( 0,0, -1,-1 ); }
/**************************************************************************** ** $Id: qt/examples/tooltip/main.cpp 2.2.1 edited 2000-08-31 $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include <qapplication.h> #include "tooltip.h" int main( int argc, char ** argv ) { QApplication a( argc, argv ); TellMe mw; mw.setCaption( "Dynamic Tool Tip Demonstration" ); a.setMainWidget( &mw ); mw.show(); return a.exec(); }
Copyright © 2000 Trolltech | Trademarks | Qt version 2.2.1
|