⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwhatsthis.cpp

📁 qtopia-phone-2.2.0下公共的控件实现源代码。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}void QWhatsThisPrivate::leaveWhatsThisMode(){    if ( state == Waiting ) {	QPtrDictIterator<QWhatsThisButton> it( *(wt->buttons) );	QWhatsThisButton * b;	while( (b=it.current()) != 0 ) {	    ++it;	    b->setOn( FALSE );	}#ifndef QT_NO_CURSOR	QApplication::restoreOverrideCursor();#endif	state = Inactive;	qApp->removeEventFilter( this );    }}void QWhatsThisPrivate::say_helper(QWidget* widget,const QPoint& ppos,bool init){    const int shadowWidth = 6;   // also used as '5' and '6' and even '8' below    const int vMargin = 8;    const int hMargin = 12;    if ( currentText.isEmpty() )	return;    QRect r;#ifndef QT_NO_RICHTEXT    QSimpleRichText* doc = 0;    if ( QStyleSheet::mightBeRichText( currentText ) ) {	doc = new QSimpleRichText( currentText, whatsThat->font() );	doc->adjustSize();	if ( doc->width() > QApplication::desktop()->width() - shadowWidth - 2*hMargin ) {	    doc->setWidth( QApplication::desktop()->width() - shadowWidth - 2*hMargin );	}	r.setRect( 0, 0, doc->width(), doc->height() );    }    else#endif    {	int sw = QApplication::desktop()->width() / 3;	if ( sw < 200 )	    sw = 200;	else if ( sw > 300 )	    sw = 300;	r = whatsThat->fontMetrics().boundingRect( 0, 0, sw, 1000,			    AlignLeft + AlignTop + WordBreak + ExpandTabs,			    currentText );    }    int w = r.width() + 2*hMargin;    int h = r.height() + 2*vMargin;    if ( init ) {	// okay, now to find a suitable location	int x;	// first try locating the widget immediately above/below,	// with nice alignment if possible.	QPoint pos;	if ( widget )	    pos = widget->mapToGlobal( QPoint( 0,0 ) );	if ( widget && w > widget->width() + 16 )		x = pos.x() + widget->width()/2 - w/2;	else	    x = ppos.x() - w/2;	// squeeze it in if that would result in part of what's this	// being only partially visible	if ( x + w > QApplication::desktop()->width() )	    x = (widget? (QMIN(QApplication::desktop()->width(),			      pos.x() + widget->width())			 ) : QApplication::desktop()->width() )		- w;	int sx = QApplication::desktop()->x();	int sy = QApplication::desktop()->y();	if ( x < sx )	    x = sx;	int y;	if ( widget && h > widget->height() + 16 ) {	    y = pos.y() + widget->height() + 2; // below, two pixels spacing	    // what's this is above or below, wherever there's most space	    if ( y + h + 10 > QApplication::desktop()->height() )		y = pos.y() + 2 - shadowWidth - h; // above, overlap	}	y = ppos.y() + 2;	// squeeze it in if that would result in part of what's this	// being only partially visible	if ( y + h > QApplication::desktop()->height() )	    y = ( widget ? (QMIN(QApplication::desktop()->height(),				 pos.y() + widget->height())			    ) : QApplication:: desktop()->height() )		- h;	if ( y < sy )	    y = sy;		whatsThat->setGeometry( x, y, w + shadowWidth, h + shadowWidth );	whatsThat->show();    }    // now for super-clever shadow stuff.  super-clever mostly in    // how many window system problems it skirts around.    QPainter p( whatsThat );    p.setPen( whatsThat->colorGroup().foreground() );    p.drawRect( 0, 0, w, h );    p.setPen( whatsThat->colorGroup().mid() );    p.setBrush( whatsThat->colorGroup().background() );    p.drawRect( 1, 1, w-2, h-2 );    p.setPen( whatsThat->colorGroup().foreground() );#ifndef QT_NO_RICHTEXT    if ( doc ) {	doc->draw( &p, hMargin, vMargin, r, whatsThat->colorGroup(), 0 );	delete doc;    }    else#endif    {	p.drawText( hMargin, vMargin, r.width(), r.height(),		    AlignLeft + AlignTop + WordBreak + ExpandTabs,		    currentText );    }    p.setPen( whatsThat->colorGroup().shadow() );    p.drawPoint( w + 5, 6 );    p.drawLine( w + 3, 6,		w + 5, 8 );    p.drawLine( w + 1, 6,		w + 5, 10 );    int i;    for( i=7; i < h; i += 2 )	p.drawLine( w, i,		    w + 5, i + 5 );    for( i = w - i + h; i > 6; i -= 2 )	p.drawLine( i, h,		    i + 5, h + 5 );    for( ; i > 0 ; i -= 2 )	p.drawLine( 6, h + 6 - i,		    i + 5, h + 5 );}void QWhatsThisPrivate::say( QWidget * widget, const QString &text, const QPoint& ppos){    currentText = text;    // make the widget, and set it up    if ( !whatsThat ) {	whatsThat = new QWidget( 0, "automatic what's this? widget",				 WType_Popup );	whatsThat->setBackgroundMode( QWidget::NoBackground );	whatsThat->setPalette( QToolTip::palette(), TRUE );	whatsThat->installEventFilter( this );    }    say_helper(widget,ppos,TRUE);}QWhatsThisPrivate::WhatsThisItem* QWhatsThisPrivate::newItem( QWidget * widget ){    WhatsThisItem * i = dict->find( (void *)widget );    if ( i )	QWhatsThis::remove( widget );    i = new WhatsThisItem;    dict->insert( (void *)widget, i );    QWidget * t = widget->topLevelWidget();    if ( !tlw->find( (void *)t ) ) {	tlw->insert( (void *)t, t );	t->installEventFilter( this );    }    connect( widget, SIGNAL(destroyed()), this, SLOT(cleanupWidget()) );    return i;}void QWhatsThisPrivate::add( QWidget * widget, QWhatsThis* special ){    newItem( widget )->whatsthis = special;}void QWhatsThisPrivate::add( QWidget * widget, const QString &text ){    newItem( widget )->s = text;}// and finally the What's This class itself/*!  Adds \a text as <i>What's This</i> help for \a widget. If the text is rich  text formatted (ie. it contains markup), it will be rendered with  the default stylesheet QStyleSheet::defaultSheet().  The text is destroyed if the widget is later destroyed and so need  not be explicitly removed.  \sa remove()*/void QWhatsThis::add( QWidget * widget, const QString &text ){    QWhatsThisPrivate::setUpWhatsThis();    wt->add(widget,text);}/*!  Removes the <i>What's This</i> help for \a widget. This happens  automatically if the widget is destroyed.  \sa add()*/void QWhatsThis::remove( QWidget * widget ){    QWhatsThisPrivate::setUpWhatsThis();    QWhatsThisPrivate::WhatsThisItem * i = wt->dict->find( (void *)widget );    if ( !i )	return;    wt->dict->take( (void *)widget );    i->deref();    if ( !i->count )	delete i;}/*!  Returns the text for \a widget, or a null string if there  is no <i>What's This</i> help for \a widget.  \sa add()*/QString QWhatsThis::textFor( QWidget * widget, const QPoint& pos){    QWhatsThisPrivate::setUpWhatsThis();    QWhatsThisPrivate::WhatsThisItem * i = wt->dict->find( widget );    if (!i)	return QString::null;    return i->whatsthis? i->whatsthis->text( pos ) : i->s;}/*!  Creates a QToolButton pre-configured  to enter <i>What's This</i> mode when clicked. You  will often use this with a toolbar:  \code     (void)QWhatsThis::whatsThisButton( my_help_tool_bar );  \endcode*/QToolButton * QWhatsThis::whatsThisButton( QWidget * parent ){    QWhatsThisPrivate::setUpWhatsThis();    return new QWhatsThisButton( parent,				 "automatic what's this? button" );}/*! \base64 whatsthis.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*//*!  Constructs a dynamic <i>What's This</i> object for \a widget.  When the widget is queried by the user, the text() function of  this QWhatsThis will be called to provide the appropriate text,  rather than using text assigned by add().*/QWhatsThis::QWhatsThis( QWidget * widget){    QWhatsThisPrivate::setUpWhatsThis();    wt->add(widget,this);}/*!  Destructs the object and frees any allocated resources.*/QWhatsThis::~QWhatsThis(){}/*!  This virtual functions returns the text for position \e p in the  widget that this <i>What's This</i> object documents.  If there is no  <i>What's This</i> text for a position, QString::null is returned.  The default implementation returns QString::null.*/QString QWhatsThis::text( const QPoint & ){    return QString::null;}/*!  Enters <i>What's This</i>? mode and returns immediately.  Qt will install a special cursor and take over mouse input  until the user clicks somewhere, then show any help available and  switch out of <i>What's This</i> mode.  Finally, Qt  removes the special cursor and help window then restores ordinary event  processing, at which point the left mouse button is not pressed.  The user can also use the Escape key to leave <i>What's This</i>? mode.\sa inWhatsThisMode(), leaveWhatsThisMode()*/void QWhatsThis::enterWhatsThisMode(){    QWhatsThisPrivate::setUpWhatsThis();    if ( wt->state == QWhatsThisPrivate::Inactive ) {#ifndef QT_NO_CURSOR	QApplication::setOverrideCursor( *wt->cursor, FALSE );#endif	wt->state = QWhatsThisPrivate::Waiting;	qApp->installEventFilter( wt );    }}/*!  Returns whether the application is in <i>What's This</i> mode.  \sa enterWhatsThisMode(), leaveWhatsThisMode() */bool QWhatsThis::inWhatsThisMode(){    if (!wt)	return FALSE;    return wt->state == QWhatsThisPrivate::Waiting;}/*!  Leaves <i>What's This</i>? question mode  This function is used internally by widgets that support  QWidget::customWhatsThis(), applications do not usually call  it.  An example for such a kind of widget is QPopupMenu: Menus still  work normally in <i>What's This</i> mode, but provide help texts for single  menu items instead.  If \e text is not a null string, then a <i>What's This</i> help window is  displayed at the global screen position \e pos.\sa inWhatsThisMode(), enterWhatsThisMode()*/void QWhatsThis::leaveWhatsThisMode( const QString& text, const QPoint& pos ){    if ( !inWhatsThisMode() )	return;    wt->leaveWhatsThisMode();    if ( !text.isNull() )	wt->say( 0, text, pos );}#include "qwhatsthis.moc"#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -