bool readFontNode( const QDomElement& element, QFont& font ) { bool ok = true; QString family; int pointSize, pixelSize, weight; bool italic; int charSet; QDomNode node = element.firstChild(); while( !node.isNull() ) { QDomElement element = node.toElement(); if( !element.isNull() ) { // was really an element QString tagName = element.tagName(); if( tagName == "Family" ) { ok = ok & readStringNode( element, family ); } else if( tagName == "PointSize" ) { ok = ok & readIntNode( element, pointSize ); } else if( tagName == "PixelSize" ) { ok = ok & readIntNode( element, pixelSize ); } else if( tagName == "Weight" ) { ok = ok & readIntNode( element, weight ); } else if( tagName == "Italic" ) { ok = ok & readBoolNode( element, italic ); } else if( tagName == "CharSet" ) { ok = ok & readIntNode( element, charSet ); } else { qDebug( "Unknown tag in color map" ); } } node = node.nextSibling(); } if( ok ) { font.setFamily( family ); if ( pointSize > 0 ) font.setPointSize( pointSize ); if ( pixelSize > 0 ) font.setPixelSize( pixelSize ); font.setWeight( weight ); font.setItalic( italic ); #if QT_VERSION < 300 // Qt 3 handles charsets internally. font.setCharSet( (QFont::CharSet)charSet ); #endif } return ok; }
QFont KResourceMan::readFontEntry( const QString& rKey, const QFont* pDefault ) const { QFont aRetFont; QString aValue = readEntry( rKey ); if( !aValue.isNull() ) { // find first part (font family) int nIndex = aValue.find( ',' ); if( nIndex == -1 ) return aRetFont; aRetFont.setFamily( aValue.left( nIndex ) ); // find second part (point size) int nOldIndex = nIndex; nIndex = aValue.find( ',', nOldIndex+1 ); if( nIndex == -1 ) return aRetFont; aRetFont.setPointSize( aValue.mid( nOldIndex+1, nIndex-nOldIndex-1 ).toInt() ); // find third part (style hint) nOldIndex = nIndex; nIndex = aValue.find( ',', nOldIndex+1 ); if( nIndex == -1 ) return aRetFont; aRetFont.setStyleHint( (QFont::StyleHint)aValue.mid( nOldIndex+1, nIndex-nOldIndex-1 ).toUInt() ); // find fourth part (char set) nOldIndex = nIndex; nIndex = aValue.find( ',', nOldIndex+1 ); if( nIndex == -1 ) return aRetFont; aRetFont.setCharSet( (QFont::CharSet)aValue.mid( nOldIndex+1, nIndex-nOldIndex-1 ).toUInt() ); // find fifth part (weight) nOldIndex = nIndex; nIndex = aValue.find( ',', nOldIndex+1 ); if( nIndex == -1 ) return aRetFont; aRetFont.setWeight( aValue.mid( nOldIndex+1, nIndex-nOldIndex-1 ).toUInt() ); // find sixth part (font bits) uint nFontBits = aValue.right( aValue.length()-nIndex-1 ).toUInt(); if( nFontBits & 0x01 ) aRetFont.setItalic( true ); if( nFontBits & 0x02 ) aRetFont.setUnderline( true ); if( nFontBits & 0x04 ) aRetFont.setStrikeOut( true ); if( nFontBits & 0x08 ) aRetFont.setFixedPitch( true ); if( nFontBits & 0x20 ) aRetFont.setRawMode( true ); } else if( pDefault ) aRetFont = *pDefault; return aRetFont; }