resource.cpp
来自「qt-x11-free-3.0.3.tar.gz minigui图形界面工具」· C++ 代码 · 共 1,943 行 · 第 1/5 页
CPP
1,943 行
ts << makeIndent( indent ) << "<string>" << entitize( *columnFields.find( l[ 0 ] ) ) << "</string>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; } indent--; ts << makeIndent( indent ) << "</column>" << endl; } } for ( i = 0; i < table->verticalHeader()->count(); ++i ) { if ( !table->verticalHeader()->label( i ).isNull() && table->verticalHeader()->label( i ).toInt() != i + 1 || table->verticalHeader()->iconSet( i ) ) { ts << makeIndent( indent ) << "<row>" << endl; indent++; QStringList l; l << table->verticalHeader()->label( i ); QPtrList<QPixmap> pix; pix.setAutoDelete( TRUE ); if ( table->verticalHeader()->iconSet( i ) ) pix.append( new QPixmap( table->verticalHeader()->iconSet( i )->pixmap() ) ); saveItem( l, pix, ts, indent ); indent--; ts << makeIndent( indent ) << "</row>" << endl; } } }#endif}void Resource::saveItem( QListViewItem *i, QTextStream &ts, int indent ){ QListView *lv = i->listView(); while ( i ) { ts << makeIndent( indent ) << "<item>" << endl; indent++; QPtrList<QPixmap> pixmaps; QStringList textes; for ( int c = 0; c < lv->columns(); ++c ) { pixmaps.append( i->pixmap( c ) ); textes << i->text( c ); } saveItem( textes, pixmaps, ts, indent ); if ( i->firstChild() ) saveItem( i->firstChild(), ts, indent ); indent--; ts << makeIndent( indent ) << "</item>" << endl; i = i->nextSibling(); }}void Resource::savePixmap( const QPixmap &p, QTextStream &ts, int indent, const QString &tagname ){ if ( p.isNull() ) { ts << makeIndent( indent ) << "<" + tagname + "></" + tagname + ">" << endl; return; } if ( formwindow && formwindow->savePixmapInline() ) ts << makeIndent( indent ) << "<" + tagname + ">" << saveInCollection( p ) << "</" + tagname + ">" << endl; else if ( formwindow && formwindow->savePixmapInProject() ) ts << makeIndent( indent ) << "<" + tagname + ">" << MetaDataBase::pixmapKey( formwindow, p.serialNumber() ) << "</" + tagname + ">" << endl; else ts << makeIndent( indent ) << "<" + tagname + ">" << MetaDataBase::pixmapArgument( formwindow, p.serialNumber() ) << "</" + tagname + ">" << endl;}QPixmap Resource::loadPixmap( const QDomElement &e, const QString &/*tagname*/ ){ QString arg = e.firstChild().toText().data(); if ( formwindow && formwindow->savePixmapInline() ) { QImage img = loadFromCollection( arg ); QPixmap pix; pix.convertFromImage( img ); MetaDataBase::setPixmapArgument( formwindow, pix.serialNumber(), arg ); return pix; } else if ( formwindow && formwindow->savePixmapInProject() ) { QPixmap pix; if ( mainwindow && mainwindow->currProject() ) pix = mainwindow->currProject()->pixmapCollection()->pixmap( arg ); else pix = PixmapChooser::loadPixmap( "image.xpm" ); MetaDataBase::setPixmapKey( formwindow, pix.serialNumber(), arg ); return pix; } QPixmap pix = PixmapChooser::loadPixmap( "image.xpm" ); MetaDataBase::setPixmapArgument( formwindow, pix.serialNumber(), arg ); return pix;}void Resource::saveItem( const QStringList &text, const QPtrList<QPixmap> &pixmaps, QTextStream &ts, int indent ){ QStringList::ConstIterator it = text.begin(); for ( ; it != text.end(); ++it ) { ts << makeIndent( indent ) << "<property name=\"text\">" << endl; indent++; ts << makeIndent( indent ) << "<string>" << entitize( *it ) << "</string>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; } for ( int i = 0; i < (int)pixmaps.count(); ++i ) { QPixmap *p = ( (QPtrList<QPixmap>)pixmaps ).at( i ); ts << makeIndent( indent ) << "<property name=\"pixmap\">" << endl; indent++; if ( p ) savePixmap( *p, ts, indent ); else savePixmap( QPixmap(), ts, indent ); indent--; ts << makeIndent( indent ) << "</property>" << endl; }}void Resource::saveChildrenOf( QObject* obj, QTextStream &ts, int indent ){ const QObjectList *l = obj->children(); if ( !l ) return; // no children to save QString closeTag; // if the widget has a layout we pretend that all widget's childs are childs of the layout - makes the structure nicer QLayout *layout = 0; QDesignerGridLayout* grid = 0; if ( !obj->inherits( "QSplitter" ) && WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( obj ) ) ) && obj->isWidgetType() && WidgetFactory::layoutType( (QWidget*)obj, layout ) != WidgetFactory::NoLayout ) { WidgetFactory::LayoutType lay = WidgetFactory::layoutType( (QWidget*)obj, layout ); switch ( lay ) { case WidgetFactory::HBox: closeTag = makeIndent( indent ) + "</hbox>"; ts << makeIndent( indent ) << "<hbox>" << endl; ++indent; break; case WidgetFactory::VBox: closeTag = makeIndent( indent ) + "</vbox>"; ts << makeIndent( indent ) << "<vbox>" << endl; ++indent; break; case WidgetFactory::Grid: closeTag = makeIndent( indent ) + "</grid>"; ts << makeIndent( indent ) << "<grid>" << endl; ++indent; grid = (QDesignerGridLayout*) layout; break; default: break; } // save properties of layout if ( lay != WidgetFactory::NoLayout ) saveObjectProperties( layout, ts, indent ); } for ( QPtrListIterator<QObject> it ( *l ); it.current(); ++it ) saveObject( it.current(), grid, ts, indent ); if ( !closeTag.isEmpty() ) { indent--; ts << closeTag << endl; }}void Resource::saveObjectProperties( QObject *w, QTextStream &ts, int indent ){ QStringList saved; QStringList changed; changed = MetaDataBase::changedProperties( w ); if ( w->isWidgetType() ) { if ( w->inherits( "Spacer" ) ) { if ( changed.find( "sizeHint" ) == changed.end() ) changed << "sizeHint"; } } else if ( w->inherits( "QLayout" ) ) { // #### should be cleaner (RS) changed << "margin" << "spacing"; } if ( w == formwindow->mainContainer() ) { if ( changed.findIndex( "geometry" ) == -1 ) changed << "geometry"; if ( changed.findIndex( "caption" ) == -1 ) changed << "caption"; } if ( changed.isEmpty() ) return; bool inLayout = w != formwindow->mainContainer() && !copying && w->isWidgetType() && ( (QWidget*)w )->parentWidget() && WidgetFactory::layoutType( ( (QWidget*)w )->parentWidget() ) != WidgetFactory::NoLayout; QStrList lst = w->metaObject()->propertyNames( !w->inherits( "Spacer" ) ); for ( QPtrListIterator<char> it( lst ); it.current(); ++it ) { if ( changed.find( QString::fromLatin1( it.current() ) ) == changed.end() ) continue; if ( saved.find( QString::fromLatin1( it.current() ) ) != saved.end() ) continue; saved << QString::fromLatin1( it.current() ); const QMetaProperty* p = w->metaObject()-> property( w->metaObject()->findProperty( it.current(), TRUE ), TRUE ); if ( !p || !p->stored( w ) || ( inLayout && qstrcmp( p->name(), "geometry" ) == 0 ) ) continue; if ( w->inherits( "QLabel" ) && qstrcmp( p->name(), "pixmap" ) == 0 && ( !( (QLabel*)w )->pixmap() || ( (QLabel*)w )->pixmap()->isNull() ) ) continue; if ( w->inherits( "QDesignerMenuBar" ) && ( qstrcmp( p->name(), "itemName" ) == 0 || qstrcmp( p->name(), "itemNumber" ) == 0 || qstrcmp( p->name(), "itemText" ) == 0 ) ) continue; if ( qstrcmp( p->name(), "name" ) == 0 ) knownNames << w->property( "name" ).toString(); ts << makeIndent( indent ) << "<property"; ts << " name=\"" << it.current() << "\""; if ( !p->testFlags( QMetaProperty::StdSet ) ) ts << " stdset=\"0\""; ts << ">" << endl; indent++; if ( p->isSetType() ) { saveSetProperty( w, it.current(), QVariant::nameToType( p->type() ), ts, indent ); } else if ( p->isEnumType() ) { saveEnumProperty( w, it.current(), QVariant::nameToType( p->type() ), ts, indent ); } else { saveProperty( w, it.current(), w->property( p->name() ), QVariant::nameToType( p->type() ), ts, indent ); } indent--; ts << makeIndent( indent ) << "</property>" << endl; } if ( w->isWidgetType() && MetaDataBase::fakeProperties( w ) ) { QMap<QString, QVariant>* fakeProperties = MetaDataBase::fakeProperties( w ); for ( QMap<QString, QVariant>::Iterator fake = fakeProperties->begin(); fake != fakeProperties->end(); ++fake ) { if ( MetaDataBase::isPropertyChanged( w, fake.key() ) ) { if ( w->inherits( "CustomWidget" ) ) { MetaDataBase::CustomWidget *cw = ( (CustomWidget*)w )->customWidget(); if ( cw && !cw->hasProperty( fake.key().latin1() ) && fake.key() != "toolTip" && fake.key() != "whatsThis" ) continue; } ts << makeIndent( indent ) << "<property name=\"" << fake.key() << "\" stdset=\"0\">" << endl; indent++; 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( w->metaObject()->findProperty( name, TRUE ), 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( w->metaObject()->findProperty( name, TRUE ), 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; double dob; 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::Double: dob = value.toDouble(); ts << makeIndent( indent ) << "<number>" << QString::number( dob ) << "</number>" << endl; break; case QVariant::KeySequence: num = value.toInt(); 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; ts << makeIndent( indent ) << "<horstretch>" << (int)sp.horStretch() << "</horstretch>" << endl; ts << makeIndent( indent ) << "<verstretch>" << (int)sp.verStretch() << "</verstretch>" << endl;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?