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

📄 qgroupbox.cpp

📁 qtopia-phone-2.2.0下公共的控件实现源代码。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ $Id: qt/src/widgets/qgroupbox.cpp   2.3.12   edited 2005-10-27 $**** Implementation of QGroupBox widget class**** Created : 950203**** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.**** This file is part of the widgets module of the Qt GUI Toolkit.**** This file may be distributed under the terms of the Q Public License** as defined by Trolltech AS of Norway and appearing in the file** LICENSE.QPL included in the packaging of this file.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition** licenses may use this file in accordance with the Qt Commercial License** Agreement provided with the Software.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Qt Commercial License Agreements.** See http://www.trolltech.com/qpl/ for QPL licensing information.** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "qgroupbox.h"#ifndef QT_NO_GROUPBOX#include "qlayout.h"#include "qpainter.h"#include "qbitmap.h"#include "qaccel.h"#include "qradiobutton.h"#include "qfocusdata.h"#include "qobjectlist.h"#include "qdrawutil.h"#include "qapplication.h"// REVISED: arnt/*!  \class QGroupBox qgroupbox.h  \brief The QGroupBox widget provides a group box frame with a title.  \ingroup organizers  A group box provides a frame, a title and a keyboard shortcut, and  displays various other widgets inside itself.  The title is on top,  the keyboard shortcut moves keyboard focus to one of the group box'  child widgets, and the child widgets are arranged in an array inside  the frame.  The simplest way to use it is to create a group box with the desired  number of columns and orientation, and then just create widgets with  the group box as parent.  However, it is also possible to change the orientation() and number  of columns() after construction, or to ignore all the automatic  layout support and manage all that yourself.  QGroupBox also lets you set the title() (normally set in the  constructor) and if you so please, even the title's alignment().  <img src=qgrpbox-w.png>  \sa QButtonGroup*//*!  Constructs a group box widget with no title.  The \e parent and \e name arguments are passed to the QWidget constructor.  This constructor does not do automatic layout.*/QGroupBox::QGroupBox( QWidget *parent, const char *name )    : QFrame( parent, name ){    init();}/*!  Constructs a group box with a title.  The \e parent and \e name arguments are passed to the QWidget constructor.  This constructor does not do automatic layout.*/QGroupBox::QGroupBox( const QString &title, QWidget *parent, const char *name )    : QFrame( parent, name ){    init();    setTitle( title );}/*!  Constructs a group box with no title. Child widgets will be arranged  in \a strips rows or columns (depending on \a orientation).  The \e parent and \e name arguments are passed to the QWidget constructor.*/QGroupBox::QGroupBox( int strips, Orientation orientation,		    QWidget *parent, const char *name )    : QFrame( parent, name ){    init();    setColumnLayout( strips, orientation );}/*!  Constructs a group box titled \a title. Child widgets will be arranged  in \a strips rows or columns (depending on \a orientation).  The \e parent and \e name arguments are passed to the QWidget constructor.*/QGroupBox::QGroupBox( int strips, Orientation orientation,		    const QString &title, QWidget *parent,		    const char *name )    : QFrame( parent, name ){    init();    setTitle( title );    setColumnLayout( strips, orientation );}void QGroupBox::init(){    int fs;    align = AlignLeft;    fs = QFrame::Box | QFrame::Sunken;    setFrameStyle( fs );#ifndef QT_NO_ACCEL    accel = 0;#endif    vbox = 0;    grid = 0;    d = 0;	//we use d directly to store a QSpacerItem    lenvisible = 0;    nCols = nRows = 0;    dir = Horizontal;}void QGroupBox::setTextSpacer(){    QSpacerItem *sp = (QSpacerItem*)d;    if ( ! sp )	return;    int h = 0;    int w = 0;    if ( lenvisible ) {	QFontMetrics fm = fontMetrics();	h = fm.height();	w = fm.width( str, lenvisible ) + 2*fm.width( "xx" );	if ( layout() ) {	    int m = layout()->margin();	    // do we have a child layout?	    for ( QLayoutIterator it = layout()->iterator(); it.current(); ++it ) {		if ( it.current()->layout() ) {		    m += it.current()->layout()->margin();		    break;		}	    }	    if ( m > 4 )		h -= m - 4;	    h = QMAX( 0, h );	}    }    sp->changeSize( w, h, QSizePolicy::Minimum, QSizePolicy::Fixed );}/*!  Sets the group box title text to \a title, and add a focus-change  accelerator if the \a title contains & followed by an appropriate  letter.  This produces "User information" with the U underscored and  Alt-U moves the keyboard focus into the group:  \code    g->setTitle( "&User information" );  \endcode*/void QGroupBox::setTitle( const QString &title ){    if ( str == title )				// no change	return;    str = title;#ifndef QT_NO_ACCEL    if ( accel )	delete accel;    accel = 0;    int s = QAccel::shortcutKey( title );    if ( s ) {	accel = new QAccel( this, "automatic focus-change accelerator" );	accel->connectItem( accel->insertItem( s, 0 ),			    this, SLOT(fixFocus()) );    }#endif    calculateFrame();    setTextSpacer();    if ( layout() ) {	layout()->activate();	QSize s( size() );	QSize ms( minimumSizeHint() );	resize( QMAX( s.width(), ms.width() ),		QMAX( s.height(), ms.height() ) );    }    update();    updateGeometry();}/*!  \fn QString QGroupBox::title() const  Returns the group box title text.*//*!  \fn int QGroupBox::alignment() const  Returns the alignment of the group box title.  The default alignment is \c AlignLeft.  \sa setAlignment(), Qt::AlignmentFlags*//*!  Sets the alignment of the group box title.  The title is always placed on the upper frame line, however,  the horizontal alignment can be specified by the \e alignment parameter.  The \e alignment is one of the following flags:  <ul>  <li> \c AlignLeft aligns the title text to the left.  <li> \c AlignRight aligns the title text to the right.  <li> \c AlignHCenter aligns the title text centered.  </ul>  \sa alignment(), Qt::AlignmentFlags*/void QGroupBox::setAlignment( int alignment ){    align = alignment;    update();}/*! \reimp*/void QGroupBox::resizeEvent( QResizeEvent *e ){    QFrame::resizeEvent(e);    calculateFrame();}/*! \reimp  \internal  overrides QFrame::paintEvent*/void QGroupBox::paintEvent( QPaintEvent *event ){    QPainter paint( this );    if ( lenvisible ) {					// draw title	QFontMetrics fm = paint.fontMetrics();	int h = fm.height();	int tw = fm.width( str, lenvisible ) + 2*fm.width(QChar(' '));	int x;	if ( align & AlignHCenter )		// center alignment	    x = frameRect().width()/2 - tw/2;	else if ( align & AlignRight )	// right alignment	    x = frameRect().width() - tw - 8;	else				// left alignment	    x = 8;	qDrawItem( &paint, style(), x, 0, tw, h, AlignCenter + ShowPrefix,		   colorGroup(), isEnabled(), 0, str, lenvisible, 0 );	QRect r( x, 0, tw, h );	paint.setClipRegion( event->region().subtract( r ) );	// clip everything but title    }    drawFrame( &paint );			// draw the frame    drawContents( &paint );			// draw the contents}/*! \reimp */void QGroupBox::updateMask(){    QRegion reg( rect() );    int len = str.length();    if ( len ) {	QFontMetrics fm = fontMetrics();	int h = fm.height();	int tw = 0;	while ( len ) {	    tw = fm.width( str, len ) + 2 * fm.width( QChar(' ') );	    if ( tw < rect().width() )		break;	    len--;	}	int x;

⌨️ 快捷键说明

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