📄 qwidgetfactory.cpp
字号:
QDomElement actions = e; while ( actions.tagName() != "actions" && !actions.isNull() ) actions = actions.nextSibling().toElement(); QDomElement toolbars = e; while ( toolbars.tagName() != "toolbars" && !toolbars.isNull() ) toolbars = toolbars.nextSibling().toElement(); QDomElement menubar = e; while ( menubar.tagName() != "menubar" && !menubar.isNull() ) menubar = menubar.nextSibling().toElement(); QDomElement functions = e; while ( functions.tagName() != "functions" && !functions.isNull() ) functions = functions.nextSibling().toElement(); QDomElement widget; while ( !e.isNull() ) { if ( e.tagName() == "class" ) { d->translationContext = e.firstChild().toText().data(); } else if ( e.tagName() == "widget" ) { widget = e; } else if ( e.tagName() == "pixmapinproject" ) { usePixmapCollection = TRUE; } else if ( e.tagName() == "layoutdefaults" ) { defSpacing = e.attribute( "spacing", QString::number( defSpacing ) ).toInt(); defMargin = e.attribute( "margin", QString::number( defMargin ) ).toInt(); } e = e.nextSibling().toElement(); } if ( !imageCollection.isNull() ) loadImageCollection( imageCollection ); createWidgetInternal( widget, parent, 0, widget.attribute("class", "QWidget") ); QWidget *w = toplevel; if ( !w ) return 0; if ( !actions.isNull() ) loadActions( actions ); if ( !toolbars.isNull() ) loadToolBars( toolbars ); if ( !menubar.isNull() ) loadMenuBar( menubar ); if ( !connections.isNull() ) loadConnections( connections, connector ); if ( w && name && qstrlen( name ) > 0 ) w->setName( name ); if ( !tabOrder.isNull() ) loadTabOrder( tabOrder );#if 0 if ( !functions.isNull() ) // compatibiliy with early 3.0 betas loadFunctions( functions );#endif return w;}void QWidgetFactory::unpackUInt16( QDataStream& in, Q_UINT16& n ){ Q_UINT8 half; in >> half; if ( half == 255 ) { in >> n; } else { n = half; }}void QWidgetFactory::unpackUInt32( QDataStream& in, Q_UINT32& n ){ Q_UINT16 half; in >> half; if ( half == 65535 ) { in >> n; } else { n = half; }}void QWidgetFactory::unpackByteArray( QDataStream& in, QByteArray& array ){ Q_UINT32 size; unpackUInt32( in, size ); array.resize( size ); in.readRawBytes( array.data(), size );}void QWidgetFactory::unpackCString( const UibStrTable& strings, QDataStream& in, QCString& cstr ){ Q_UINT32 n; unpackUInt32( in, n ); cstr = strings.asCString( n );}void QWidgetFactory::unpackString( const UibStrTable& strings, QDataStream& in, QString& str ){ Q_UINT32 n; unpackUInt32( in, n ); str = strings.asString( n );}void QWidgetFactory::unpackStringSplit( const UibStrTable& strings, QDataStream& in, QString& str ){ QString remainder; unpackString( strings, in, str ); unpackString( strings, in, remainder ); str += remainder;}void QWidgetFactory::unpackVariant( const UibStrTable& strings, QDataStream& in, QVariant& value ){ QString imageName; Q_UINT32 number; Q_UINT16 count; Q_UINT16 x; Q_UINT16 y; Q_UINT16 width; Q_UINT16 height; Q_UINT8 bit; Q_UINT8 type; in >> type; switch ( type ) { case QVariant::String: unpackString( strings, in, value.asString() ); break; case QVariant::Pixmap: unpackString( strings, in, imageName ); if ( imageName.isEmpty() ) { value.asPixmap() = QPixmap(); } else { value.asPixmap() = loadPixmap( imageName ); } break; case QVariant::Image: unpackString( strings, in, imageName ); if ( imageName.isEmpty() ) { value.asImage() = QImage(); } else { value.asImage() = loadFromCollection( imageName ); } break; case QVariant::IconSet: unpackString( strings, in, imageName ); if ( imageName.isEmpty() ) { value.asIconSet() = QIconSet(); } else { value.asIconSet() = QIconSet( loadPixmap(imageName) ); } break; case QVariant::StringList: unpackUInt16( in, count ); while ( count-- ) { QString str; unpackString( strings, in, str ); value.asStringList().append( str ); } break; case QVariant::Rect: unpackUInt16( in, x ); unpackUInt16( in, y ); unpackUInt16( in, width ); unpackUInt16( in, height ); value = QRect( x, y, width, height ); break; case QVariant::Size: unpackUInt16( in, width ); unpackUInt16( in, height ); value = QSize( width, height ); break; case QVariant::Color: in >> value.asColor(); break; case QVariant::Point: unpackUInt16( in, x ); unpackUInt16( in, y ); value = QPoint( x, y ); break; case QVariant::Int: unpackUInt32( in, number ); value = (int) number; break; case QVariant::Bool: in >> bit; value = QVariant( bit != 0, 0 ); break; case QVariant::Double: in >> value.asDouble(); break; case QVariant::CString: unpackCString( strings, in, value.asCString() ); break; case QVariant::Cursor: in >> value.asCursor(); break; case QVariant::Date: in >> value.asDate(); break; case QVariant::Time: in >> value.asTime(); break; case QVariant::DateTime: in >> value.asDateTime(); break; default: in >> value; }}void QWidgetFactory::inputSpacer( const UibStrTable& strings, QDataStream& in, QLayout *parent ){ QCString name; QVariant value; QCString comment; QSizePolicy::SizeType sizeType = QSizePolicy::Preferred; bool vertical = FALSE; int w = 0; int h = 0; Q_UINT16 column = 0; Q_UINT16 row = 0; Q_UINT16 colspan = 1; Q_UINT16 rowspan = 1; Q_UINT8 objectTag; in >> objectTag; while ( !in.atEnd() && objectTag != Object_End ) { switch ( objectTag ) { case Object_GridCell: unpackUInt16( in, column ); unpackUInt16( in, row ); unpackUInt16( in, colspan ); unpackUInt16( in, rowspan ); break; case Object_VariantProperty: unpackCString( strings, in, name ); unpackVariant( strings, in, value ); if ( name == "orientation" ) { vertical = ( value == "Vertical" ); } else if ( name == "sizeHint" ) { w = value.toSize().width(); h = value.toSize().height(); } else if ( name == "sizeType" ) { sizeType = stringToSizeType( value.toString() ); } break; default: qFatal( "Corrupt" ); } in >> objectTag; } if ( parent != 0 ) { QSpacerItem *spacer; if ( vertical ) { spacer = new QSpacerItem( w, h, QSizePolicy::Minimum, sizeType ); } else { spacer = new QSpacerItem( w, h, sizeType, QSizePolicy::Minimum ); } if ( parent->inherits("QGridLayout") ) { ((QGridLayout *) parent)->addMultiCell( spacer, row, row + rowspan - 1, column, column + colspan - 1, vertical ? Qt::AlignHCenter : Qt::AlignVCenter ); } else { parent->addItem( spacer ); } }}void QWidgetFactory::inputColumnOrRow( const UibStrTable& strings, QDataStream& in, QObject *parent, bool isRow ){ QString text; QPixmap pixmap; QString field; bool clickable = TRUE; bool resizable = TRUE; QCString name; QVariant value; QCString comment; QString str; Q_UINT8 objectTag; in >> objectTag; while ( !in.atEnd() && objectTag != Object_End ) { switch ( objectTag ) { case Object_TextProperty: unpackCString( strings, in, name ); unpackCString( strings, in, value.asCString() ); unpackCString( strings, in, comment ); str = translate( value.asCString(), comment ); if ( name == "field" ) { field = str; } else if ( name == "text" ) { text = str; } break; case Object_VariantProperty: unpackCString( strings, in, name ); unpackVariant( strings, in, value ); if ( name == "clickable" ) { clickable = value.toBool(); } else if ( name == "pixmap" ) { pixmap = value.asPixmap(); } else if ( name == "resizable" ) { resizable = value.toBool(); } break; default: qFatal( "Corrupt" ); } in >> objectTag; } if ( parent != 0 ) { if ( parent->inherits("QListView") ) { createListViewColumn( (QListView *) parent, text, pixmap, clickable, resizable );#ifndef QT_NO_TABLE } else if ( parent->inherits("QTable") ) { createTableColumnOrRow( (QTable *) parent, text, pixmap, field, isRow );#endif } }}void QWidgetFactory::inputItem( const UibStrTable& strings, QDataStream& in, QObject *parent, QListViewItem *parentItem ){ QStringList texts; QValueList<QPixmap> pixmaps; QCString name; QVariant value; QCString comment; Q_UINT8 objectTag; QListView *listView = 0; if ( parent != 0 && parent->inherits("QListView") ) parent = (QListView *) parent; QListViewItem *item = 0; if ( listView != 0 ) { if ( parentItem == 0 ) { item = new QListViewItem( listView, d->lastItem ); } else { item = new QListViewItem( parentItem, d->lastItem ); } d->lastItem = item; } in >> objectTag; while ( !in.atEnd() && objectTag != Object_End ) { switch ( objectTag ) { case Object_Item: if ( listView != 0 ) d->lastItem->setOpen( TRUE ); inputItem( strings, in, parent, item ); break; case Object_TextProperty: unpackCString( strings, in, name ); unpackCString( strings, in, value.asCString() ); unpackCString( strings, in, comment ); if ( name == "text" ) texts << translate( value.asCString(), comment ); break; case Object_VariantProperty: unpackCString( strings, in, name ); unpackVariant( strings, in, value ); if ( name == "pixmap" ) pixmaps << value.asPixmap(); break; default: qFatal( "Corrupt" ); } in >> objectTag; } if ( listView != 0 ) { int i = 0; QStringList::ConstIterator t = texts.begin(); while ( t != texts.end() ) { item->setText( i, *t ); ++i; ++t; } int j = 0; QValueList<QPixmap>::ConstIterator p = pixmaps.begin(); while ( p != pixmaps.end() ) { item->setPixmap( j, *p ); ++j; ++p; } } else { QString text = texts.last(); QPixmap pixmap = pixmaps.last(); if ( parent != 0 ) { if ( parent->inherits("QComboBox") || parent->inherits("QListBox") ) { QListBox *listBox = (QListBox *) parent->qt_cast( "QListBox" ); if ( listBox == 0 ) listBox = ((QComboBox *) parent)->listBox(); if ( pixmap.isNull() ) { (void) new QListBoxText( listBox, text ); } else { (void) new QListBoxPixmap( listBox, pixmap, text ); } #ifndef QT_NO_ICONVIEW } else if ( parent->inherits("QIconView") ) { (void) new QIconViewItem( (QIconView *) parent, text, pixmap ); #endif } } }}void QWidgetFactory::inputMenuItem( QObject **objects, const UibStrTable& strings, QDataStream& in, QMenuBar *menuBar ){ QCString name; QCString text; Q_UINT16 actionNo; Q_UINT8 objectTag; unpackCString( strings, in, name ); unpackCString( strings, in, text );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -