📄 resource.cpp
字号:
} 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 + -