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

📄 resource.cpp

📁 Qt/Embedded是一个多平台的C++图形用户界面应用程序框架
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		}		ts << makeIndent( indent ) << "<property>" << endl;		indent++;		ts << makeIndent( indent ) << "<name>" << fake.key() << "</name>" << endl;		saveProperty( w, fake.key(), *fake, (*fake).type(), ts, indent );		indent--;		ts << makeIndent( indent ) << "</property>" << endl;	    }	}    }}void Resource::saveSetProperty( QObject *w, const QString &name, QVariant::Type, QTextStream &ts, int indent ){    const QMetaProperty *p = w->metaObject()->property( name, TRUE );    QStrList l( p->valueToKeys( w->property( name ).toInt() ) );    QString v;    for ( uint i = 0; i < l.count(); ++i ) {	v += l.at( i );	if ( i < l.count() - 1 )	    v += "|";    }    ts << makeIndent( indent ) << "<set>" << v << "</set>" << endl;}void Resource::saveEnumProperty( QObject *w, const QString &name, QVariant::Type, QTextStream &ts, int indent ){    const QMetaProperty *p = w->metaObject()->property( name, TRUE );    ts << makeIndent( indent ) << "<enum>" << p->valueToKey( w->property( name ).toInt() ) << "</enum>" << endl;}void Resource::saveProperty( QObject *w, const QString &name, const QVariant &value, QVariant::Type t, QTextStream &ts, int indent ){    if ( name == "hAlign" || name =="vAlign" || name == "wordwrap" || name == "layoutMargin" || name =="layoutSpacing" )	return;    int num, unum;    QString comment;    if ( w && formwindow->widgets()->find( (QWidget*)w ) )	comment = MetaDataBase::propertyComment( w, name );    switch ( t ) {    case QVariant::String:	ts << makeIndent( indent ) << "<string>" << entitize( value.toString() ) << "</string>" << endl;	if ( !comment.isEmpty() )	    ts << makeIndent( indent ) << "<comment>" << entitize( comment ) << "</comment>" << endl;	break;    case QVariant::CString:	ts << makeIndent( indent ) << "<cstring>" << entitize( value.toCString() ).latin1() << "</cstring>" << endl;	break;    case QVariant::Bool:	ts << makeIndent( indent ) << "<bool>" << mkBool( value.toBool() ) << "</bool>" << endl;	break;    case QVariant::Int:	num = value.toInt();	if ( w && w->inherits( "QLayout" ) ) {	    if ( name == "spacing" )		num = MetaDataBase::spacing( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) );	    else if ( name == "margin" )		num = MetaDataBase::margin( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) );	}	ts << makeIndent( indent ) << "<number>" << QString::number( num ) << "</number>" << endl;	break;    case QVariant::UInt:	unum = value.toUInt();	if ( w && w->inherits( "QLayout" ) ) {	    if ( name == "spacing" )		num = MetaDataBase::spacing( WidgetFactory::layoutParent( (QLayout*)w ) );	    else if ( name == "margin" )		num = MetaDataBase::margin( WidgetFactory::layoutParent( (QLayout*)w ) );	}	ts << makeIndent( indent ) << "<number>" << QString::number( unum ) << "</number>" << endl;	break;    case QVariant::Rect: {	QVariant v( value );	ts << makeIndent( indent ) << "<rect>" << endl;	indent++;	ts << makeIndent( indent ) << "<x>" << QString::number( v.toRect().x() ) << "</x>" << endl;	ts << makeIndent( indent ) << "<y>" << QString::number( v.toRect().y() ) << "</y>" << endl;	ts << makeIndent( indent ) << "<width>" << QString::number( v.toRect().width() ) << "</width>" << endl;	ts << makeIndent( indent ) << "<height>" << QString::number( v.toRect().height() ) << "</height>" << endl;	indent--;	ts << makeIndent( indent ) << "</rect>" << endl;    } break;    case QVariant::Point: {	QVariant v( value );	ts << makeIndent( indent ) << "<point>" << endl;	indent++;	ts << makeIndent( indent ) << "<x>" << QString::number( v.toPoint().x() ) << "</x>" << endl;	ts << makeIndent( indent ) << "<y>" << QString::number( v.toPoint().y() ) << "</y>" << endl;	indent--;	ts << makeIndent( indent ) << "</point>" << endl;    } break;    case QVariant::Size: {	QVariant v( value );	ts << makeIndent( indent ) << "<size>" << endl;	indent++;	ts << makeIndent( indent ) << "<width>" << QString::number( v.toSize().width() ) << "</width>" << endl;	ts << makeIndent( indent ) << "<height>" << QString::number( v.toSize().height() ) << "</height>" << endl;	indent--;	ts << makeIndent( indent ) << "</size>" << endl;    } break;    case QVariant::Color: {	QVariant v( value );	ts << makeIndent( indent ) << "<color>" << endl;	indent++;	saveColor( ts, indent, v.toColor() );	indent--;	ts << makeIndent( indent ) << "</color>" << endl;    } break;    case QVariant::Font: {	QVariant v( value );	ts << makeIndent( indent ) << "<font>" << endl;	QFont f( qApp->font() );	if ( w && w->isWidgetType() && ((QWidget*)w)->parentWidget() )	    f = ((QWidget*)w)->parentWidget()->font();	QFont f2( v.toFont() );	indent++;	if ( f.family() != f2.family() )	    ts << makeIndent( indent ) << "<family>" << f2.family() << "</family>" << endl;	if ( f.pointSize() != f2.pointSize() )	    ts << makeIndent( indent ) << "<pointsize>" << QString::number( f2.pointSize() ) << "</pointsize>" << endl;	if ( f.bold() != f2.bold() )	    ts << makeIndent( indent ) << "<bold>" << QString::number( (int)f2.bold() ) << "</bold>" << endl;	if ( f.italic() != f2.italic() )	    ts << makeIndent( indent ) << "<italic>" << QString::number( (int)f2.italic() ) << "</italic>" << endl;	if ( f.underline() != f2.underline() )	    ts << makeIndent( indent ) << "<underline>" << QString::number( (int)f2.underline() ) << "</underline>" << endl;	if ( f.strikeOut() != f2.strikeOut() )	    ts << makeIndent( indent ) << "<strikeout>" << QString::number( (int)f2.strikeOut() ) << "</strikeout>" << endl;	indent--;	ts << makeIndent( indent ) << "</font>" << endl;    } break;    case QVariant::SizePolicy: {	QSizePolicy sp( value.toSizePolicy() );	ts << makeIndent( indent ) << "<sizepolicy>" << endl;	indent++;	ts << makeIndent( indent ) << "<hsizetype>" << (int)sp.horData() << "</hsizetype>" << endl;	ts << makeIndent( indent ) << "<vsizetype>" << (int)sp.verData() << "</vsizetype>" << endl;	indent--;	ts << makeIndent( indent ) << "</sizepolicy>" << endl;	break;    }    case QVariant::Pixmap:	savePixmap( value.toPixmap(), ts, indent );	break;    case QVariant::IconSet:	ts << makeIndent( indent ) << "<iconset>" << saveInCollection( value.toIconSet().pixmap() ) << "</iconset>" << endl;	break;    case QVariant::Image:	ts << makeIndent( indent ) << "<image>" << saveInCollection( value.toImage() ) << "</image>" << endl;    break;    case QVariant::Palette: {	QPalette p( value.toPalette() );	ts << makeIndent( indent ) << "<palette>" << endl;	indent++;	ts << makeIndent( indent ) << "<active>" << endl;	indent++;	saveColorGroup( ts, indent, p.active() );	indent--;	ts << makeIndent( indent ) << "</active>" << endl;		ts << makeIndent( indent ) << "<disabled>" << endl;	indent++;	saveColorGroup( ts, indent, p.disabled() );	indent--;	ts << makeIndent( indent ) << "</disabled>" << endl;		ts << makeIndent( indent ) << "<inactive>" << endl;	indent++;	saveColorGroup( ts, indent, p.inactive() );	indent--;	ts << makeIndent( indent ) << "</inactive>" << endl;	indent--;	ts << makeIndent( indent ) << "</palette>" << endl;    } break;    case QVariant::Cursor:	ts << makeIndent( indent ) << "<cursor>" << value.toCursor().shape() << "</cursor>" << endl;	break;    default:	qWarning( "saving the property %s of type %d not supported yet", name.latin1(), (int)t );    }}void Resource::saveColorGroup( QTextStream &ts, int indent, const QColorGroup &cg ){    for( int r = 0 ; r < QColorGroup::NColorRoles ; r++ ) {	ts << makeIndent( indent ) << "<color>" << endl;	indent++;	saveColor( ts, indent, cg.color( (QColorGroup::ColorRole)r ) );	indent--;	ts << makeIndent( indent ) << "</color>" << endl;	QPixmap* pm = cg.brush( (QColorGroup::ColorRole)r ).pixmap();	if ( pm && !pm->isNull() )	    savePixmap( *pm, ts, indent );    }}void Resource::saveColor( QTextStream &ts, int indent, const QColor &c ){    ts << makeIndent( indent ) << "<red>" << QString::number( c.red() ) << "</red>" << endl;    ts << makeIndent( indent ) << "<green>" << QString::number( c.green() ) << "</green>" << endl;    ts << makeIndent( indent ) << "<blue>" << QString::number( c.blue() ) << "</blue>" << endl;}QObject *Resource::createObject( const QDomElement &e, QWidget *parent, QLayout* layout ){    lastItem = 0;    QDomElement n = e.firstChild().toElement();    QWidget *w = 0; // the widget that got created    QObject *obj = 0; // gets the properties    int row = e.attribute( "row" ).toInt();    int col = e.attribute( "column" ).toInt();    int rowspan = e.attribute( "rowspan" ).toInt();    int colspan = e.attribute( "colspan" ).toInt();    if ( rowspan < 1 )	rowspan = 1;    if ( colspan < 1 )	colspan = 1;    while ( !n.isNull() ) {	if ( n.tagName() == "class" ) {	    QString className = n.firstChild().toText().data();	    if ( previewMode && !layout && className  == "QLayoutWidget" )		className = "QWidget";	    if ( previewMode && layout && className == "QLayoutWidget" ) {		// hide layout widgets in preview mode		w = parent;	    } else {		obj = WidgetFactory::create( WidgetDatabase::idFromClassName( className ), parent, 0, FALSE );		if ( !obj )		    return 0;		if ( !mainContainerSet ) {		    if ( formwindow && !previewMode )			formwindow->setMainContainer( (QWidget*)obj );		    mainContainerSet = TRUE;		}		if ( !obj ) {		    n = n.firstChild().toElement();		    continue;		}		w = (QWidget*)obj;		if ( layout ) {		    switch ( WidgetFactory::layoutType( layout ) ) {		    case WidgetFactory::HBox:			( (QHBoxLayout*)layout )->addWidget( w );			break;		    case WidgetFactory::VBox:			( (QVBoxLayout*)layout )->addWidget( w );			break;		    case WidgetFactory::Grid:			( (QDesignerGridLayout*)layout )->addMultiCellWidget( w, row, row + rowspan - 1,									      col, col + colspan - 1 );			break;		    default:			break;		    }		}			if ( !toplevel )		    toplevel = w;		layout = 0;				if ( w && formwindow ) {		    if ( !parent || ( !parent->inherits( "QTabWidget" ) && !parent->inherits( "QWizard" ) ) )			formwindow->insertWidget( w, pasting );		    else if ( parent && ( parent->inherits( "QTabWidget" ) || parent->inherits( "QWizard" ) ) )			MetaDataBase::addEntry( w );		}				if ( style )		    w->setStyle( style );		if ( pal )		    w->setPalette( *pal );	    }	} else if ( n.tagName() == "spacer" ) {	    createSpacer( n, w, layout, Qt::Horizontal );	} else if ( n.tagName() == "widget" ) {	    createObject( n, w, layout );	} else if ( n.tagName() == "hbox" ) {	    QLayout *parentLayout = layout;	    if ( previewMode && layout && layout->inherits( "QGridLayout" ) )		layout = WidgetFactory::createLayout( 0, 0, WidgetFactory::HBox );	    else		layout = WidgetFactory::createLayout( w, layout, WidgetFactory::HBox );	    obj = layout;	    n = n.firstChild().toElement();	    if ( previewMode && parentLayout && parentLayout->inherits( "QGridLayout" ) )		( (QDesignerGridLayout*)parentLayout )->addMultiCellLayout( layout, row, row + rowspan - 1, col, col + colspan - 1 );	    continue;	} else if ( n.tagName() == "grid" ) {	    QLayout *parentLayout = layout;	    if ( previewMode && layout && layout->inherits( "QGridLayout" ) )		layout = WidgetFactory::createLayout( 0, 0, WidgetFactory::Grid );	    else		layout = WidgetFactory::createLayout( w, layout, WidgetFactory::Grid );	    obj = layout;	    n = n.firstChild().toElement();	    if ( previewMode && parentLayout && parentLayout->inherits( "QGridLayout" ) )		( (QDesignerGridLayout*)parentLayout )->addMultiCellLayout( layout, row, row + rowspan - 1, col, col + colspan - 1 );	    continue;	} else if ( n.tagName() == "vbox" ) {	    QLayout *parentLayout = layout;	    if ( previewMode && layout && layout->inherits( "QGridLayout" ) )		layout = WidgetFactory::createLayout( 0, 0, WidgetFactory::VBox );	    else		layout = WidgetFactory::createLayout( w, layout, WidgetFactory::VBox );	    obj = layout;	    n = n.firstChild().toElement();	    if ( previewMode && parentLayout && parentLayout->inherits( "QGridLayout" ) )		( (QDesignerGridLayout*)parentLayout )->addMultiCellLayout( layout, row, row + rowspan - 1, col, col + colspan - 1 );	    continue; 	} else if ( n.tagName() == "property" ) {	    QDomElement n2 = n.firstChild().toElement();	    if ( n2.tagName() == "name" && obj ) {		setObjectProperty( obj, n2.firstChild().toText().data(), n2.nextSibling().toElement() );	    }	} else if ( n.tagName() == "attribute" ) {	    QDomElement n2 = n.firstChild().toElement();	    if ( n2.tagName() == "name" ) {		QString attrib = n2.firstChild().toText().data();		QVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), QVariant() );		if ( parent->inherits( "QTabWidget" ) ) {		    if ( attrib == "title" )			( (QTabWidget*)parent )->insertTab( (QWidget*)obj, v.toString() );		} else if ( parent->inherits( "QWizard" ) ) {		    if ( attrib == "title" )			( (QWizard*)parent )->addPage( (QWidget*)obj, v.toString() );		}	    }	} else if ( n.tagName() == "item" ) {	    createItem( n, w );	} else if ( n.tagName() == "column" ) {	    createColumn( n, w );	}		n = n.nextSibling().toElement();    }    return w;}void Resource::createColumn( const QDomElement &e, QWidget *widget ){    if ( widget->inherits( "QListView" ) ) {	QListView *lv = (QListView*)widget;	QDomElement n = e.firstChild().toElement();	QPixmap pix;	bool hasPixmap = FALSE;	QString txt;	bool clickable = TRUE, resizeable = TRUE;	while ( !n.isNull() ) {	    if ( n.tagName() == "property" ) {		QDomElement n2 = n.firstChild().toElement();		if ( n2.tagName() == "name" ) {		    QString attrib = n2.firstChild().toText().data();		    QVariant v = DomTool::elementToVariant( n2.nextSibling().toElement(), QVariant() );		    if ( attrib == "text" )			txt = v.toString();		    else if ( attrib == "pixmap" ) {			pix = loadPixmap( n2.nextSibling().toElement() );			hasPixmap = TRUE;		    } else if ( attrib == "clickable" )			clickable = v.toBool();		    else if ( attrib == "resizeable" )			resizeable = v.toBool();		}	    }	    n = n.nextSibling().toElement();	}	lv->addColumn( txt );	int i = lv->header()->count() - 1;	if ( hasPixmap ) {	    lv->header()->setLabel( i, pix, txt );

⌨️ 快捷键说明

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