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

📄 qwidgetfactory.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    QPopupMenu *popupMenu = new QPopupMenu( menuBar->parentWidget(), name );    in >> objectTag;    while ( !in.atEnd() && objectTag != Object_End ) {	switch ( objectTag ) {	case Object_ActionRef:	    unpackUInt16( in, actionNo );	    ((QAction *) objects[actionNo])->addTo( popupMenu );	    break;	case Object_Separator:	    popupMenu->insertSeparator();	    break;	default:	    qFatal( "Corrupt" );	}	in >> objectTag;    }    menuBar->insertItem( translate(text), popupMenu );}QObject *QWidgetFactory::inputObject( QObject **objects, int& numObjects,				      const UibStrTable& strings,				      QDataStream& in, QWidget *ancestorWidget,				      QObject *parent, QCString className ){    QObject *obj = 0;    QWidget *widget = 0;    QLayout *layout = 0;    QWidget *parentWidget = 0;    QLayout *parentLayout = 0;    bool isQObject = !className.isEmpty();    if ( isQObject ) {	if ( parent != 0 ) {	    if ( parent->isWidgetType() ) {		if ( parent->inherits("QMainWindow") ) {		    parentWidget = ((QMainWindow *) parent)->centralWidget();		} else {		    parentWidget = (QWidget *) parent;		}	    } else if ( parent->inherits("QLayout") ) {		parentLayout = (QLayout *) parent;		parentWidget = ancestorWidget;	    }	}	if ( className == "QAction" ) {	    unpackCString( strings, in, className );	    if ( className == "QActionGroup" ) {		obj = new QActionGroup( parent );	    } else {		obj = new QAction( parent );	    }	} else if ( className == "QLayout" ) {	    unpackCString( strings, in, className );	    LayoutType type = Grid;	    if ( className == "QHBoxLayout" ) {		type = HBox;	    } else if ( className == "QVBoxLayout" ) {		type = VBox;	    }	    if ( parentLayout != 0 && parentLayout->inherits("QGridLayout") ) {		layout = createLayout( 0, 0, type );	    } else {		layout = createLayout( parentWidget, parentLayout, type );	    }	    obj = layout;	} else if ( className == "QMenuBar" ) {	    unpackCString( strings, in, className );	    widget = ((QMainWindow *) parent)->menuBar();	    obj = widget;	} else if ( className == "QToolBar" ) {	    Q_UINT8 dock;	    in >> dock;	    unpackCString( strings, in, className );	    widget = new QToolBar( QString::null, (QMainWindow *) parent,				   (Qt::Dock) dock );	    obj = widget;	} else if ( className == "QWidget" ) {	    unpackCString( strings, in, className );	    widget = createWidget( className, parentWidget, 0 );	    obj = widget;	}	if ( widget != 0 )	    ancestorWidget = widget;	d->lastItem = 0;	objects[numObjects++] = obj;    }    QCString name;    QVariant value;    QCString comment;    QString str;    Q_UINT16 actionNo;    int metAttribute = 0;    Q_UINT16 column = 0;    Q_UINT16 row = 0;    Q_UINT16 colspan = 1;    Q_UINT16 rowspan = 1;    Q_UINT8 paletteTag;    Q_UINT8 objectTag;    in >> objectTag;    while ( !in.atEnd() && objectTag != Object_End ) {	switch ( objectTag ) {	case Object_ActionRef:	    unpackUInt16( in, actionNo );	    ((QAction *) objects[actionNo])->addTo( (QToolBar *) widget );	    break;	case Object_Attribute:	    metAttribute = 2;	    break;	case Object_Column:	    inputColumnOrRow( strings, in, obj, FALSE );	    break;	case Object_Event:	    unpackCString( strings, in, name );	    unpackVariant( strings, in, value );	    // ### do something with value.asStringList()	    break;	case Object_FontProperty:	    {		QFont font;		QString family;		Q_UINT16 pointSize;		Q_UINT8 fontFlags;		unpackCString( strings, in, name );		in >> fontFlags;		if ( fontFlags & Font_Family ) {		    unpackString( strings, in, family );		    font.setFamily( family );		}		if ( fontFlags & Font_PointSize ) {		    unpackUInt16( in, pointSize );		    font.setPointSize( pointSize );		}		if ( fontFlags & Font_Bold )		    font.setBold( TRUE );		if ( fontFlags & Font_Italic )		    font.setItalic( TRUE );		if ( fontFlags & Font_Underline )		    font.setUnderline( TRUE );		if ( fontFlags & Font_StrikeOut )		    font.setStrikeOut( TRUE );		if ( obj != 0 )		    setProperty( obj, name, font );	    }	    break;	case Object_GridCell:	    unpackUInt16( in, column );	    unpackUInt16( in, row );	    unpackUInt16( in, colspan );	    unpackUInt16( in, rowspan );	    break;	case Object_Item:	    inputItem( strings, in, obj );	    break;	case Object_MenuItem:	    inputMenuItem( objects, strings, in, (QMenuBar *) widget );	    break;	case Object_PaletteProperty:	    {		QPalette palette;		QColorGroup colorGroup;		QColor color;		int role = -1;		unpackCString( strings, in, name );		in >> paletteTag;		while ( !in.atEnd() && paletteTag != Palette_End ) {		    switch ( paletteTag ) {		    case Palette_Active:			palette.setActive( colorGroup );			role = -1;			break;		    case Palette_Inactive:			palette.setInactive( colorGroup );			role = -1;			break;		    case Palette_Disabled:			palette.setDisabled( colorGroup );			role = -1;			break;		    case Palette_Color:			role++;			in >> color;			colorGroup.setColor( (QColorGroup::ColorRole) role,					     color );			break;		    case Palette_Pixmap:			unpackVariant( strings, in, value );			colorGroup.setBrush( (QColorGroup::ColorRole) role,					     QBrush(color, value.asPixmap()) );			break;		    default:			qFatal( "Corrupt" );		    }		    in >> paletteTag;		}		if ( obj != 0 )		    setProperty( obj, name, palette );	    }	    break;	case Object_Row:	    inputColumnOrRow( strings, in, obj, TRUE );	    break;	case Object_Spacer:	    inputSpacer( strings, in, layout );	    break;	case Object_Separator:	    ((QToolBar *) widget)->addSeparator();	    break;	case Object_SubAction:	    inputObject( objects, numObjects, strings, in, parentWidget,			 obj != 0 ? obj : parent, "QAction" );	    break;	case Object_SubLayout:	    inputObject( objects, numObjects, strings, in, parentWidget, obj,			 "QLayout" );	    break;	case Object_SubWidget:	    inputObject( objects, numObjects, strings, in, parentWidget, obj,			 "QWidget" );	    break;	case Object_TextProperty:	    unpackCString( strings, in, name );	    unpackCString( strings, in, value.asCString() );	    unpackCString( strings, in, comment );	    str = translate( value.asCString(), comment );	    if ( metAttribute > 0 ) {		if ( name == "title" ) {		    if ( parent != 0 ) {			if ( parent->inherits("QTabWidget") ) {			    ((QTabWidget *) parent)->insertTab( widget, str );			} else if ( parent->inherits("QWizard") ) {			    ((QWizard *) parent)->addPage( widget, str );			}		    }		}	    } else {		if ( obj != 0 )		    setProperty( obj, name, str );	    }	    break;	case Object_VariantProperty:	    unpackCString( strings, in, name );	    unpackVariant( strings, in, value );	    if ( metAttribute > 0 ) {		if ( name == "id" ) {		    if ( parent != 0 && parent->inherits("QWidgetStack") )			((QWidgetStack *) parent)->addWidget( widget, value.toInt() );		}	    } else {		if ( obj != 0 )		    setProperty( obj, name, value );	    }	    break;	default:	    qFatal( "Corrupt" );	}	in >> objectTag;	metAttribute--;    }    if ( parentLayout != 0 ) {	if ( widget != 0 ) {	    if ( parentLayout->inherits("QGridLayout") ) {		((QGridLayout *) parentLayout)->addMultiCellWidget(			widget, row, row + rowspan - 1, column,			column + colspan - 1 );	    } else {		((QBoxLayout *) parentLayout)->addWidget( widget );	    }	} else if ( layout != 0 ) {	    if ( parentLayout->inherits("QGridLayout") ) {		((QGridLayout *) parentLayout)->addMultiCellLayout(			layout, row, row + rowspan - 1, column,			column + colspan - 1 );	    }	}    }    return obj;}QWidget *QWidgetFactory::createFromUibFile( QDataStream& in,	QObject * /* connector */ , QWidget *parent, const char *name ){#define END_OF_BLOCK() \	( in.atEnd() || in.device()->at() >= nextBlock )    Q_UINT8 lf;    Q_UINT8 cr;    in >> lf;    in >> cr;    if ( lf != '\n' || cr != '\r' ) {	qWarning( "File corrupted" );	return 0;    }    Q_UINT8 qdatastreamVersion;    in >> qdatastreamVersion;    if ( (int) qdatastreamVersion > in.version() ) {	qWarning( "Incompatible version of Qt" );	return 0;    }    in.setVersion( qdatastreamVersion );    UibStrTable strings;    QObject **objects = 0;    int numObjects = 0;    Q_UINT8 blockType;    Q_UINT32 blockSize;    in >> blockType;    while ( !in.atEnd() && blockType != Block_End ) {	unpackUInt32( in, blockSize );	QIODevice::Offset nextBlock = in.device()->at() + blockSize;	switch ( blockType ) {	case Block_Actions:	    inputObject( objects, numObjects, strings, in, toplevel, toplevel );	    break;	case Block_Buddies:	    {		Q_UINT16 labelNo;		Q_UINT16 buddyNo;		do {		    unpackUInt16( in, labelNo );		    unpackUInt16( in, buddyNo );		    QLabel *label =			(QLabel *) objects[labelNo]->qt_cast( "QLabel" );		    if ( label != 0 )			label->setBuddy( (QWidget *) objects[buddyNo] );		} while ( !END_OF_BLOCK() );	    }	    break;	case Block_Connections:	    {		QString language = "C++";		Q_UINT16 senderNo = 0;		QString signal = "clicked()";		Q_UINT16 receiverNo = 0;		QString slot = "accept()";		Q_UINT8 connectionFlags;		do {		    in >> connectionFlags;		    if ( connectionFlags & Connection_Language )			unpackString( strings, in, language );		    if ( connectionFlags & Connection_Sender )			unpackUInt16( in, senderNo );		    if ( connectionFlags & Connection_Signal )			unpackStringSplit( strings, in, signal );		    if ( connectionFlags & Connection_Receiver )			unpackUInt16( in, receiverNo );		    if ( connectionFlags & Connection_Slot )			unpackStringSplit( strings, in, slot );		    // ####if 0		    qWarning( "connect( %p, %s, %p, %s )", objects[senderNo],			      signal.latin1(), objects[receiverNo],			      slot.latin1() );#endif		} while ( !END_OF_BLOCK() );	    }	    break;	case Block_Functions:	    // ###	    qWarning( "Block_Functions not supported" );	    in.device()->at( nextBlock );	    break;	case Block_Images:	    {		QString format;		Q_UINT32 length;		QByteArray data;		Image image;		do {		    unpackString( strings, in, image.name );		    unpackString( strings, in, format );		    unpackUInt32( in, length );		    unpackByteArray( in, data );		    image.img = loadImageData( format, length, data );		    images += image;		} while ( !END_OF_BLOCK() );	    }	    break;	case Block_Intro:	    {		Q_INT16 defaultMargin;		Q_INT16 defaultSpacing;		Q_UINT16 maxObjects;		Q_UINT8 introFlags;		in >> introFlags;		in >> defaultMargin;		in >> defaultSpacing;		unpackUInt16( in, maxObjects );		unpackCString( strings, in, d->translationContext );		if ( introFlags & Intro_Pixmapinproject )		    usePixmapCollection = TRUE;		if ( defaultMargin != -32768 )		    defMargin = defaultMargin;		if ( defaultSpacing != -32768 )		    defSpacing = defaultSpacing;		objects = new QObject *[maxObjects];	    }	    break;	case Block_Menubar:	    inputObject( objects, numObjects, strings, in, toplevel, toplevel,			 "QMenuBar" );	    break;	case Block_Slots:	    {		QString language;		QString slot;		do {		    unpackString( strings, in, language );		    unpackStringSplit( strings, in, slot );		} while ( !END_OF_BLOCK() );	    }	    break;	case Block_Strings:	    strings.readBlock( in, blockSize );	    break;	case Block_Tabstops:	    {		Q_UINT16 beforeNo;		Q_UINT16 afterNo;		unpackUInt16( in, beforeNo );		while ( !END_OF_BLOCK() ) {		    unpackUInt16( in, afterNo );		    toplevel->setTabOrder( (QWidget *) objects[beforeNo],					   (QWidget *) objects[afterNo] );		    beforeNo = afterNo;

⌨️ 快捷键说明

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