resource.cpp
来自「qt-x11-free-3.0.3.tar.gz minigui图形界面工具」· C++ 代码 · 共 1,943 行 · 第 1/5 页
CPP
1,943 行
MetaDataBase::setExportMacro( formwindow->mainContainer(), exportMacro ); } loadExtraSource(); if ( mainwindow && formwindow ) mainwindow->insertFormWindow( formwindow ); if ( formwindow ) { formwindow->killAccels( formwindow ); if ( formwindow->layout() ) formwindow->layout()->activate(); if ( hadGeometry ) formwindow->resize( formwindow->size().expandedTo( formwindow->minimumSize(). expandedTo( formwindow->minimumSizeHint() ) ) ); else formwindow->resize( formwindow->size().expandedTo( formwindow->sizeHint() ) ); } return TRUE;}bool Resource::save( const QString& filename, bool formCodeOnly ){ if ( !formwindow || filename.isEmpty() ) return FALSE; if (!langIface) { langIface = MetaDataBase::languageInterface( mainwindow->self->currProject()->language() ); if ( langIface ) langIface->addRef(); } if ( formCodeOnly && langIface && langIface->supports( LanguageInterface::StoreFormCodeSeperate ) ) { saveFormCode(); return TRUE; // missing error checking in saveFormCode ? } currFileName = filename; QFile f( filename ); if ( !f.open( IO_WriteOnly ) ) return FALSE; bool b = save( &f ); f.close(); return b;}bool Resource::save( QIODevice* dev ){ if ( !formwindow ) return FALSE; if (!langIface) { langIface = MetaDataBase::languageInterface( mainwindow->self->currProject()->language() ); if ( langIface ) langIface->addRef(); } QTextStream ts( dev ); ts.setCodec( QTextCodec::codecForName( "UTF-8" ) ); ts << "<!DOCTYPE UI><UI version=\"3.0\" stdsetdef=\"1\">" << endl; saveMetaInfoBefore( ts, 0 ); saveObject( formwindow->mainContainer(), 0, ts, 0 ); if ( formwindow->mainContainer()->inherits( "QMainWindow" ) ) { saveMenuBar( (QMainWindow*)formwindow->mainContainer(), ts, 0 ); saveToolBars( (QMainWindow*)formwindow->mainContainer(), ts, 0 ); } if ( !MetaDataBase::customWidgets()->isEmpty() && !usedCustomWidgets.isEmpty() ) saveCustomWidgets( ts, 0 ); if ( formwindow->mainContainer()->inherits( "QMainWindow" ) ) saveActions( formwindow->actionList(), ts, 0 ); if ( !images.isEmpty() ) saveImageCollection( ts, 0 ); if ( !MetaDataBase::connections( formwindow ).isEmpty() || !MetaDataBase::slotList( formwindow ).isEmpty() ) saveConnections( ts, 0 ); saveTabOrder( ts, 0 ); saveMetaInfoAfter( ts, 0 ); ts << "</UI>" << endl; saveFormCode(); images.clear(); return TRUE;}QString Resource::copy(){ if ( !formwindow ) return QString::null; copying = TRUE; QString s; QTextOStream ts( &s ); ts << "<!DOCTYPE UI-SELECTION><UI-SELECTION>" << endl; QWidgetList widgets = formwindow->selectedWidgets(); QWidgetList tmp( widgets ); for ( QWidget *w = widgets.first(); w; w = widgets.next() ) { QWidget *p = w->parentWidget(); bool save = TRUE; while ( p ) { if ( tmp.findRef( p ) != -1 ) { save = FALSE; break; } p = p->parentWidget(); } if ( save ) saveObject( w, 0, ts, 0 ); } if ( !MetaDataBase::customWidgets()->isEmpty() && !usedCustomWidgets.isEmpty() ) saveCustomWidgets( ts, 0 ); if ( !images.isEmpty() ) saveImageCollection( ts, 0 ); ts << "</UI-SELECTION>" << endl; return s;}void Resource::paste( const QString &cb, QWidget *parent ){ if ( !formwindow ) return; mainContainerSet = TRUE; pasting = TRUE; QBuffer buf( QCString( cb.utf8() ) ); buf.open( IO_ReadOnly ); QDomDocument doc; QString errMsg; int errLine; if ( !doc.setContent( &buf, &errMsg, &errLine ) ) { qDebug( QString("Parse error: ") + errMsg + QString(" in line %d"), errLine ); } QDomElement firstWidget = doc.firstChild().toElement().firstChild().toElement(); QDomElement imageCollection = firstWidget; images.clear(); while ( imageCollection.tagName() != "images" && !imageCollection.isNull() ) imageCollection = imageCollection.nextSibling().toElement(); QDomElement customWidgets = firstWidget; while ( customWidgets.tagName() != "customwidgets" && !customWidgets.isNull() ) customWidgets = customWidgets.nextSibling().toElement(); if ( !imageCollection.isNull() ) loadImageCollection( imageCollection ); if ( !customWidgets.isNull() ) loadCustomWidgets( customWidgets, this ); QWidgetList widgets; formwindow->clearSelection( FALSE ); formwindow->setPropertyShowingBlocked( TRUE ); formwindow->clearSelection( FALSE ); while ( !firstWidget.isNull() ) { if ( firstWidget.tagName() == "widget" ) { QWidget *w = (QWidget*)createObject( firstWidget, parent, 0 ); if ( !w ) continue; widgets.append( w ); int x = w->x() + formwindow->grid().x(); int y = w->y() + formwindow->grid().y(); if ( w->x() + w->width() > parent->width() ) x = QMAX( 0, parent->width() - w->width() ); if ( w->y() + w->height() > parent->height() ) y = QMAX( 0, parent->height() - w->height() ); if ( x != w->x() || y != w->y() ) w->move( x, y ); formwindow->selectWidget( w ); } else if ( firstWidget.tagName() == "spacer" ) { QWidget *w = createSpacer( firstWidget, parent, 0, firstWidget.tagName() == "vspacer" ? Qt::Vertical : Qt::Horizontal ); if ( !w ) continue; widgets.append( w ); int x = w->x() + formwindow->grid().x(); int y = w->y() + formwindow->grid().y(); if ( w->x() + w->width() > parent->width() ) x = QMAX( 0, parent->width() - w->width() ); if ( w->y() + w->height() > parent->height() ) y = QMAX( 0, parent->height() - w->height() ); if ( x != w->x() || y != w->y() ) w->move( x, y ); formwindow->selectWidget( w ); } firstWidget = firstWidget.nextSibling().toElement(); } formwindow->setPropertyShowingBlocked( FALSE ); formwindow->emitShowProperties(); buf.close(); PasteCommand *cmd = new PasteCommand( FormWindow::tr( "Paste" ), formwindow, widgets ); formwindow->commandHistory()->addCommand( cmd );}void Resource::saveObject( QObject *obj, QDesignerGridLayout* grid, QTextStream &ts, int indent ){ if ( obj && obj->isWidgetType() && ( (QWidget*)obj )->isHidden() ) return; QString closeTag; if ( obj->isWidgetType() ) { const char* className = WidgetFactory::classNameOf( obj ); if ( obj->isA( "CustomWidget" ) ) usedCustomWidgets << QString( className ); if ( obj != formwindow && !formwindow->widgets()->find( (QWidget*)obj ) ) return; // we don't know anything about this thing QString attributes; if ( grid ) { QDesignerGridLayout::Item item = grid->items[ (QWidget*)obj ]; attributes += QString(" row=\"") + QString::number(item.row) + "\""; attributes += QString(" column=\"") + QString::number(item.column) + "\""; if ( item.rowspan * item.colspan != 1 ) { attributes += QString(" rowspan=\"") + QString::number(item.rowspan) + "\""; attributes += QString(" colspan=\"") + QString::number(item.colspan) + "\""; } } if ( qstrcmp( className, "Spacer" ) == 0 ) { closeTag = makeIndent( indent ) + "</spacer>\n"; ts << makeIndent( indent ) << "<spacer" << attributes << ">" << endl; ++indent; } else { closeTag = makeIndent( indent ) + "</widget>\n"; ts << makeIndent( indent ) << "<widget class=\"" << className << "\"" << attributes << ">" << endl; ++indent; } if ( WidgetFactory::hasItems( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( obj ) ) ) ) saveItems( obj, ts, indent ); saveObjectProperties( obj, ts, indent ); } else { // test for other objects we created. Nothing so far. return; } if ( obj->inherits( "QTabWidget" ) ) { QTabWidget* tw = (QTabWidget*) obj; QObjectList* tmpl = tw->queryList( "QWidgetStack" ); QWidgetStack *ws = (QWidgetStack*)tmpl->first(); QTabBar *tb = ( (QDesignerTabWidget*)obj )->tabBar(); for ( int i = 0; i < tb->count(); ++i ) { QTab *t = tb->tabAt( i ); if ( !t ) continue; QWidget *w = ws->widget( t->identifier() ); if ( !w ) continue; if ( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 ) continue; // we don't know this widget ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << endl; ++indent; ts << makeIndent( indent ) << "<property name=\"name\">" << endl; indent++; ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; ts << makeIndent( indent ) << "<attribute name=\"title\">" << endl; indent++; ts << makeIndent( indent ) << "<string>" << entitize( t->text() ) << "</string>" << endl; indent--; ts << makeIndent( indent ) << "</attribute>" << endl; saveChildrenOf( w, ts, indent ); --indent; ts << makeIndent( indent ) << "</widget>" << endl; } delete tmpl; } else if ( obj->inherits( "QWizard" ) ) { QWizard* wiz = (QWizard*)obj; for ( int i = 0; i < wiz->pageCount(); ++i ) { QWidget *w = wiz->page( i ); if ( !w ) continue; if ( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 ) continue; // we don't know this widget ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << endl; ++indent; ts << makeIndent( indent ) << "<property name=\"name\">" << endl; indent++; ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; ts << makeIndent( indent ) << "<attribute name=\"title\">" << endl; indent++; ts << makeIndent( indent ) << "<string>" << entitize( wiz->title( w ) ) << "</string>" << endl; indent--; ts << makeIndent( indent ) << "</attribute>" << endl; saveChildrenOf( w, ts, indent ); --indent; ts << makeIndent( indent ) << "</widget>" << endl; } } else if ( obj->inherits( "QMainWindow" ) ) { saveChildrenOf( ( (QMainWindow*)obj )->centralWidget(), ts, indent ); } else { saveChildrenOf( obj, ts, indent ); } indent--; ts << closeTag;}void Resource::saveItems( QObject *obj, QTextStream &ts, int indent ){ if ( obj->inherits( "QListBox" ) || obj->inherits( "QComboBox" ) ) { QListBox *lb = 0; if ( obj->inherits( "QListBox" ) ) lb = (QListBox*)obj; else lb = ( (QComboBox*)obj )->listBox(); QListBoxItem *i = lb->firstItem(); for ( ; i; i = i->next() ) { ts << makeIndent( indent ) << "<item>" << endl; indent++; QStringList text; text << i->text(); QPtrList<QPixmap> pixmaps; if ( i->pixmap() ) pixmaps.append( i->pixmap() ); saveItem( text, pixmaps, ts, indent ); indent--; ts << makeIndent( indent ) << "</item>" << endl; } } else if ( obj->inherits( "QIconView" ) ) { QIconView *iv = (QIconView*)obj; QIconViewItem *i = iv->firstItem(); for ( ; i; i = i->nextItem() ) { ts << makeIndent( indent ) << "<item>" << endl; indent++; QStringList text; text << i->text(); QPtrList<QPixmap> pixmaps; if ( i->pixmap() ) pixmaps.append( i->pixmap() ); saveItem( text, pixmaps, ts, indent ); indent--; ts << makeIndent( indent ) << "</item>" << endl; } } else if ( obj->inherits( "QListView" ) ) { QListView *lv = (QListView*)obj; int i; for ( i = 0; i < lv->header()->count(); ++i ) { ts << makeIndent( indent ) << "<column>" << endl; indent++; QStringList l; l << lv->header()->label( i ); QPtrList<QPixmap> pix; pix.setAutoDelete( TRUE ); if ( lv->header()->iconSet( i ) ) pix.append( new QPixmap( lv->header()->iconSet( i )->pixmap() ) ); saveItem( l, pix, ts, indent ); ts << makeIndent( indent ) << "<property name=\"clickable\">" << endl; indent++; ts << makeIndent( indent ) << "<bool>" << mkBool( lv->header()->isClickEnabled( i ) )<< "</bool>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; ts << makeIndent( indent ) << "<property name=\"resizeable\">" << endl; indent++; ts << makeIndent( indent ) << "<bool>" << mkBool( lv->header()->isResizeEnabled( i ) ) << "</bool>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; indent--; ts << makeIndent( indent ) << "</column>" << endl; } saveItem( lv->firstChild(), ts, indent - 1 ); }#ifndef QT_NO_TABLE else if ( obj->inherits( "QTable" ) ) { QTable *table = (QTable*)obj; int i; QMap<QString, QString> columnFields = MetaDataBase::columnFields( table ); bool isDataTable = table->inherits( "QDataTable" ); for ( i = 0; i < table->horizontalHeader()->count(); ++i ) { if ( !table->horizontalHeader()->label( i ).isNull() && table->horizontalHeader()->label( i ).toInt() != i + 1 || table->horizontalHeader()->iconSet( i ) || isDataTable ) { ts << makeIndent( indent ) << "<column>" << endl; indent++; QStringList l; l << table->horizontalHeader()->label( i ); QPtrList<QPixmap> pix; pix.setAutoDelete( TRUE ); if ( table->horizontalHeader()->iconSet( i ) ) pix.append( new QPixmap( table->horizontalHeader()->iconSet( i )->pixmap() ) ); saveItem( l, pix, ts, indent ); if ( table->inherits( "QDataTable" ) && !columnFields.isEmpty() ) { ts << makeIndent( indent ) << "<property name=\"field\">" << endl; indent++;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?