resource.cpp
来自「qt-x11-free-3.0.3.tar.gz minigui图形界面工具」· C++ 代码 · 共 1,943 行 · 第 1/5 页
CPP
1,943 行
item->setPixmap( i, pixmaps[ i ] ); } lastItem = item; }}QWidget *Resource::createSpacer( const QDomElement &e, QWidget *parent, QLayout *layout, Qt::Orientation o ){ QDomElement n = e.firstChild().toElement(); 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; Spacer *spacer = (Spacer*) WidgetFactory::create( WidgetDatabase::idFromClassName("Spacer"), parent, "spacer", FALSE); spacer->setOrientation( o ); spacer->setAutoResize( FALSE ); while ( !n.isNull() ) { if ( n.tagName() == "property" ) setObjectProperty( spacer, n.attribute( "name" ), n.firstChild().toElement() ); n = n.nextSibling().toElement(); } spacer->setAutoResize( TRUE ); if ( formwindow ) formwindow->insertWidget( spacer, pasting ); if ( layout ) { if ( layout->inherits( "QBoxLayout" ) ) ( (QBoxLayout*)layout )->addWidget( spacer, 0, spacer->alignment() ); else ( (QDesignerGridLayout*)layout )->addMultiCellWidget( spacer, row, row + rowspan - 1, col, col + colspan - 1, spacer->alignment() ); } return spacer;}/*! Attention: this function has to be in sync with Uic::setObjectProperty(). If you change one, change both.*/void Resource::setObjectProperty( QObject* obj, const QString &prop, const QDomElement &e ){ const QMetaProperty *p = obj->metaObject()->property( obj->metaObject()->findProperty( prop, TRUE ), TRUE ); if ( !obj->inherits( "QLayout" ) ) {// no layouts in metadatabase... (RS) if ( obj->inherits( "CustomWidget" ) ) { MetaDataBase::CustomWidget *cw = ( (CustomWidget*)obj )->customWidget(); if ( cw && !cw->hasProperty( prop.latin1() ) && !p && prop != "toolTip" && prop != "whatsThis" ) return; } MetaDataBase::setPropertyChanged( obj, prop, TRUE ); } QVariant defVarient; if ( e.tagName() == "font" ) { QFont f( qApp->font() ); if ( obj->isWidgetType() && ( (QWidget*)obj )->parentWidget() ) f = ( (QWidget*)obj )->parentWidget()->font(); defVarient = QVariant( f ); } QString comment; QVariant v( DomTool::elementToVariant( e, defVarient, comment ) ); if ( !comment.isEmpty() ) { MetaDataBase::addEntry( obj ); MetaDataBase::setPropertyComment( obj, prop, comment ); } if ( e.tagName() == "pixmap" ) { QPixmap pix = loadPixmap( e ); if ( pix.isNull() ) return; v = QVariant( pix ); } else if ( e.tagName() == "iconset" ) { QPixmap pix = loadPixmap( e, "iconset" ); if ( pix.isNull() ) return; v = QVariant( QIconSet( pix ) ); } else if ( e.tagName() == "image" ) { v = QVariant( loadFromCollection( v.toString() ) ); } if ( !p ) { MetaDataBase::setFakeProperty( obj, prop, v ); if ( obj->isWidgetType() ) { if ( prop == "database" && obj != toplevel ) { QStringList lst = MetaDataBase::fakeProperty( obj, "database" ).toStringList(); if ( lst.count() > 2 ) dbControls.insert( obj->name(), lst[ 2 ] ); else if ( lst.count() == 2 ) dbTables.insert( obj->name(), lst ); } return; } } if ( e.tagName() == "palette" ) { QDomElement n = e.firstChild().toElement(); QPalette p; while ( !n.isNull() ) { QColorGroup cg; if ( n.tagName() == "active" ) { cg = loadColorGroup( n ); p.setActive( cg ); } else if ( n.tagName() == "inactive" ) { cg = loadColorGroup( n ); p.setInactive( cg ); } else if ( n.tagName() == "disabled" ) { cg = loadColorGroup( n ); p.setDisabled( cg ); } n = n.nextSibling().toElement(); } v = QPalette( p ); } else if ( e.tagName() == "enum" && p && p->isEnumType() ) { QString key( v.toString() ); v = QVariant( p->keyToValue( key ) ); } else if ( e.tagName() == "set" && p && p->isSetType() ) { QString keys( v.toString() ); QStringList lst = QStringList::split( '|', keys ); QStrList l; for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) l.append( *it ); v = QVariant( p->keysToValue( l ) ); } if ( prop == "caption" ) { QCString s1 = v.toCString(); QString s2 = v.toString(); if ( !s1.isEmpty() ) formwindow->setCaption( s1 ); else if ( !s2.isEmpty() ) formwindow->setCaption( s2 ); } if ( prop == "icon" ) { formwindow->setIcon( v.toPixmap() ); } if ( prop == "geometry" ) { if ( obj == toplevel ) { hadGeometry = TRUE; toplevel->resize( v.toRect().size() ); return; } else if ( obj == formwindow->mainContainer() ) { hadGeometry = TRUE; formwindow->resize( v.toRect().size() ); return; } } if ( obj->inherits( "QLayout" ) ) { if ( prop == "spacing" ) { MetaDataBase::setSpacing( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)obj ) ), v.toInt() ); return; } if ( prop == "margin" ) { MetaDataBase::setMargin( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)obj ) ), v.toInt() ); return; } } if ( prop == "name" ) { if ( pasting ) { QString s = v.toString(); formwindow->unify( (QWidget*)obj, s, TRUE ); obj->setName( s ); return; } else if ( formwindow && obj == formwindow->mainContainer() ) { formwindow->setName( v.toCString() ); } } if ( prop == "sizePolicy" ) { QSizePolicy sp = v.toSizePolicy(); sp.setHeightForWidth( ( (QWidget*)obj )->sizePolicy().hasHeightForWidth() ); } obj->setProperty( prop, v );}QString Resource::saveInCollection( const QImage &img ){ QString imgName = "none"; QValueList<Image>::Iterator it = images.begin(); for ( ; it != images.end(); ++it ) { if ( img == ( *it ).img ) { imgName = ( *it ).name; break; } } if ( imgName == "none" ) { Image i; imgName = "image" + QString::number( images.count() ); i.name = imgName; i.img = img; images.append( i ); } return imgName;}void Resource::saveImageData( const QImage &img, QTextStream &ts, int indent ){ QByteArray ba; QBuffer buf( ba ); buf.open( IO_WriteOnly ); QImageIO iio( &buf, "XPM" ); iio.setImage( img ); iio.write(); buf.close(); ulong len = ba.size() * 2; QByteArray bazip( len ); ::compress( (uchar*) bazip.data(), &len, (uchar*) ba.data(), ba.size() ); QString res; ts << makeIndent( indent ) << "<data format=\"XPM.GZ\" length=\"" << ba.size() << "\">"; static const char hexchars[] = "0123456789abcdef"; for ( int i = 0; i < (int)len; ++i ) { uchar s = (uchar) bazip[i]; ts << hexchars[s >> 4]; ts << hexchars[s & 0x0f]; } ts << "</data>" << endl;}void Resource::saveImageCollection( QTextStream &ts, int indent ){ ts << makeIndent( indent ) << "<images>" << endl; indent++; QValueList<Image>::Iterator it = images.begin(); for ( ; it != images.end(); ++it ) { ts << makeIndent( indent ) << "<image name=\"" << (*it).name << "\">" << endl; indent++; saveImageData( (*it).img, ts, indent ); indent--; ts << makeIndent( indent ) << "</image>" << endl; } indent--; ts << makeIndent( indent ) << "</images>" << endl;}static QImage loadImageData( QDomElement &n2 ){ QImage img; QString data = n2.firstChild().toText().data(); char *ba = new char[ data.length() / 2 ]; for ( int i = 0; i < (int)data.length() / 2; ++i ) { char h = data[ 2 * i ].latin1(); char l = data[ 2 * i + 1 ].latin1(); uchar r = 0; if ( h <= '9' ) r += h - '0'; else r += h - 'a' + 10; r = r << 4; if ( l <= '9' ) r += l - '0'; else r += l - 'a' + 10; ba[ i ] = r; } QString format = n2.attribute( "format", "PNG" ); if ( format == "XPM.GZ" ) { ulong len = n2.attribute( "length" ).toULong(); if ( len < data.length() * 5 ) len = data.length() * 5; QByteArray baunzip( len ); ::uncompress( (uchar*) baunzip.data(), &len, (uchar*) ba, data.length()/2 ); img.loadFromData( (const uchar*)baunzip.data(), len, "XPM" ); } else { img.loadFromData( (const uchar*)ba, data.length() / 2, format ); } delete [] ba; return img;}void Resource::loadImageCollection( const QDomElement &e ){ QDomElement n = e.firstChild().toElement(); while ( !n.isNull() ) { if ( n.tagName() == "image" ) { Image img; img.name = n.attribute( "name" ); QDomElement n2 = n.firstChild().toElement(); while ( !n2.isNull() ) { if ( n2.tagName() == "data" ) img.img = loadImageData( n2 ); n2 = n2.nextSibling().toElement(); } images.append( img ); n = n.nextSibling().toElement(); } }}QImage Resource::loadFromCollection( const QString &name ){ QValueList<Image>::Iterator it = images.begin(); for ( ; it != images.end(); ++it ) { if ( ( *it ).name == name ) return ( *it ).img; } return QImage();}void Resource::saveConnections( QTextStream &ts, int indent ){ ts << makeIndent( indent ) << "<connections>" << endl; indent++; QValueList<MetaDataBase::Connection> connections = MetaDataBase::connections( formwindow ); QValueList<MetaDataBase::Connection>::Iterator it = connections.begin(); for ( ; it != connections.end(); ++it ) { MetaDataBase::Connection conn = *it; if ( ( knownNames.findIndex( QString( conn.sender->name() ) ) == -1 && qstrcmp( conn.sender->name(), "this" ) != 0 ) || ( knownNames.findIndex( QString( conn.receiver->name() ) ) == -1 && qstrcmp( conn.receiver->name(), "this" ) != 0 ) ) continue; if ( formwindow->isMainContainer( (QWidget*)(*it).receiver ) && !MetaDataBase::hasSlot( formwindow, MetaDataBase::normalizeSlot( (*it).slot ).latin1() ) ) continue; if ( conn.sender->inherits( "CustomWidget" ) ) { MetaDataBase::CustomWidget *cw = ( (CustomWidget*)conn.sender )->customWidget(); if ( cw && !cw->hasSignal( conn.signal ) ) continue; } if ( conn.receiver->inherits( "CustomWidget" ) && !formwindow->isMainContainer( conn.receiver ) ) { MetaDataBase::CustomWidget *cw = ( (CustomWidget*)conn.receiver )->customWidget(); if ( cw && !cw->hasSlot( MetaDataBase::normalizeSlot( conn.slot ).latin1() ) ) continue; } ts << makeIndent( indent ) << "<connection>" << endl; indent++; ts << makeIndent( indent ) << "<sender>" << entitize( conn.sender->name() ) << "</sender>" << endl; ts << makeIndent( indent ) << "<signal>" << entitize( conn.signal ) << "</signal>" << endl; ts << makeIndent( indent ) << "<receiver>" << entitize( conn.receiver->name() ) << "</receiver>" << endl; ts << makeIndent( indent ) << "<slot>" << entitize( MetaDataBase::normalizeSlot( conn.slot ) ) << "</slot>" << endl; indent--; ts << makeIndent( indent ) << "</connection>" << endl; } QString lang = formwindow->project()->language(); LanguageInterface *iface = langIface; if ( iface && MetaDataBase::hasEvents( lang ) ) { QObjectList *l = formwindow->queryList( "QWidget" ); l->append( formwindow ); QPtrList<QAction> lst = formwindow->actionList(); for ( QAction *a = lst.first(); a; a = lst.next() ) l->append( a ); for ( QObject *o = l->first(); o; o = l->next() ) { if ( !MetaDataBase::hasObject( o ) ) continue; QMap<QString, QStringList> eventFunctions = MetaDataBase::eventFunctions( o ); QMap<QString, QStringList>::ConstIterator it = eventFunctions.begin(); for ( ; it != eventFunctions.end(); ++it ) { QString sls = (*it).join( "," ); MetaDataBase::Connection conn; conn.sender = o; conn.signal = it.key(); conn.slot = sls; langConnections[ lang ].append( conn ); } } delete l; } indent--; ts << makeIndent( indent ) << "</connections>" << endl;}void Resource::loadConnections( const QDomElement &e ){ QDomElement n = e.firstChild().toElement(); while ( !n.isNull() ) { if ( n.tagName() == "connection" ) { QString lang = n.attribute( "language", "C+
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?