Qtopia Home - Classes - Hierachy - Annotated - Functions - Licenses - Reference |
|
The QFont class specifies a font used for drawing text. More...
#include <qfont.h>
The QFont class specifies a font used for drawing text.
QFont, more precisely, is a collection of attributes of a font. When Qt needs to draw text, it will look up and load the closest matching installed font and draw using that.
The most important attributes of a QFont are its family(), pointSize(), weight() and whether it is italic() or not. There are QFont constructors that take these attributes as arguments, as shown in this example:
void MyWidget::paintEvent( QPaintEvent * )
{
QPainter p( this );
// times, 12pt, normal
p.setFont( QFont( "times" ) );
p.drawText( 10, 20, "Text1" );
// helvetica, 18pt, normal
p.setFont( QFont( "helvetica", 18 ) );
p.drawText( 10, 120, "Text2" );
// courier, 24pt, bold
p.setFont( QFont( "courier", 24, QFont::Bold ) );
p.drawText( 10, 220, "Text3" );
// lucida, 36pt, bold, italic
p.setFont( QFont( "lucida", 36, QFont::Bold, TRUE ) );
p.drawText( 10, 320, "Text4" );
}
The default QFont constructor makes a copy of application's default font, QApplication::font().
You can also change these attributes of an existing QFont object using functions such as setFamily(), setPointSize(), setWeight() and setItalic().
There are also some less-used attributes. setUnderline() decides whether the font is underlined or not; setStrikeOut() can be used to get overstrike (a horizontal line through the middle of the characters); setFixedPitch() determines whether Qt should give preference to fixed-pitch (also known as fixed-width) or variable-pitch fonts when it needs to choose an installed font; setStyleHint() can be used to offer more general help to the font matching algorithm, and on X11 setRawName() can be used to bypass the entire font matching and use an X11 XLFD.
Of course there is also a reader function for each of these set*() functions. Note that the reader functions return the values previously set, not the attributes of the actual window system font that will be used for drawing. You can get information about the font that will be used for drawing by using QFontInfo, but be aware that QFontInfo may be slow and that its results depend on what fonts are installed.
In general font handling and loading are costly operations, especially on X11. The QFont class contains extensive optimizations to make copying of QFont objects fast, and to cache the results of the slow window system functions it uses.
QFont also offers a few static functions, mostly to tune the font matching algorithm: You can control what happens if a font's family isn't installed using insertSubstitution() and removeSubstitution(), ask what happens for a single family using substitute() and you can get a complete list of the fallback families using substitutions().
cacheStatistics() offers cache effectiveness information; this is useful mostly for debugging.
Finally, QApplication::setFont() allows you to set the default font. The default default font is chosen at application startup from a set of common installed fonts that support the correct character set for the current locale. Of course, the initialization algorithm has a default, too: The default default default font!
The font matching algorithm works as follows:
First an available font family is found. If the requested is not available the styleHint() is used to select a replacement family. If the style hint has not been set, "helvetica" will be used.
If even the replacement family is not found, "helvetica" is searched for, if that too is not found Qt will search for a last resort font, i.e. a specific font to match to, ignoring the attribute settings. Qt searches through a built-in list of very common fonts. If none of these are available, Qt gives you an error message and aborts (of course this only happens if you are using fonts and Qt has to load a font). We have not been able to find a case where this happens. Please report it as a bug if it does, preferably with a list of the fonts you have installed.
The following attributes are then matched, in order of priority:
If, for example, a font with the correct character set is found, but with all other attributes in the list unmatched, it will be chosen before a font with the wrong character set but with all other attributes correct.
The point size is defined to match if it is within 20% of the requested point size. Of course, when several fonts match and only point size differs the closest point size to the one requested will be chosen.
For more general information on fonts, see the comp.fonts FAQ and for more general information on encodings, see Roman Czyborra's page about that.
See also QFontMetrics, QFontInfo, QApplication::setFont(), QWidget::setFont(), QPainter::setFont(), QFont::StyleHint, QFont::CharSet, and QFont::Weight.
The following character set encodings are available:
Style hints are used by the font matching algorithm when a selected font family cannot be found and is used to find an appropriate default family.
The style hint value of AnyStyle leaves the task of finding a good default family to the font matching algorithm.
The other available style hints are QFont::SansSerif, QFont::TypeWriter, QFont::OldEnglish, QFont::System
The style strategy tells the font matching algorithm what type of fonts should be used to find an appropriate default family.
The algorithm won't prefer any type of font if NoStratgie is provided.
The other available strategys are QFont::PreferBitmap, QFont::PreferDevice, QFont::PreferOutline, QFont::ForceOutline
Any of these may be ORed with a indicator whether exact matching or good quality should be preferred.
QFont::PreferMatch, QFont::PreferQuality
Contains the predefined font weights:
See also QApplication::setFont() and QApplication::font().
If pointSize is less than or equal to 0 it is set to 1.
See also setFamily(), setPointSize(), setWeight(), and setItalic().
See also setFamily(), setPointSize(), setWeight(), and setItalic().
Returns TRUE if weight() is a value greater than QFont::Normal, otherwise FALSE.
See also weight(), setBold(), and QFontInfo::bold().
Use QFontInfo to find the CharSet of the window system font actually used.
See also setCharSet().
See also pointSize().
This function will be removed in a future version of Qt. Please use QApplication::font() instead.
See also QFontInfo.
Use QFontInfo to find the family name of the window system font that is actually used for drawing.
Example:
QFont font( "Nairobi" );
QFontInfo info( font );
qDebug( "Font family requested is : \"%s\"", font.family() );
qDebug( "Font family actually used is: \"%s\"", info.family() );
See also setFamily() and substitute().
Use QFontInfo to find the fixed pitch value of the window system font actually used.
See also setFixedPitch() and QFontInfo::fixedPitch().
If familyName already exists in the substitution table, it will be replaced with this new substitution.
See also removeSubstitution(), substitutions(), and substitute().
See also operator= and operator==.
Use QFontInfo to find the italic value of the window system font actually used.
See also setItalic().
See also QMap.
See also lastResortFont().
The current implementation tries a wide variety of common fonts, returning the first one it finds. The implementation may change at any time.
See also lastResortFamily().
Two QFonts are different if their font attributes are different. If rawMode() is enabled for both fonts, then only the family fields are compared.
See also operator==().
Two QFonts are equal if their font attributes are equal. If rawMode() is enabled for both fonts, then only the family fields are compared.
See also operator!=().
Use QFontInfo to find the point size of the window system font actually used.
Example of use:
QFont font( "helvetica" );
QFontInfo info( font );
font.setPointSize( 53 );
qDebug( "Font size requested is : %d", font.pointSize() );
qDebug( "Font size actually used is: %d", info.pointSize() );
See also setPointSize() and deciPointSize().
See also pointSize().
See also setRawMode().
See also setRawName().
See also insertSubstitution(), substitutions(), and substitute().
Sets the weight to QFont::Bold if enable is TRUE, or to QFont::Normal if enable is FALSE.
Use setWeight() to set the weight to other values.
See also bold() and setWeight().
If the character set encoding is not available another will be used for drawing. For most non-trivial applications you will probably not want this to happen since it can totally obscure the text shown to the user. This is why the font matching algorithm gives high priority to finding the correct character set.
You can test that the character set is correct using the QFontInfo class.
See also charSet() and QFontInfo.
Please use QApplication::setFont() instead.
The family name is case insensitive.
If the family is not available a default family is used.
See also family(), setStyleHint(), and QFontInfo.
A fixed pitch font is a font where all characters have the same width.
See also fixedPitch() and QFontInfo.
See also italic() and QFontInfo.
Example:
QFont font( "courier" );
font.setPointSize( 18 );
See also pointSize() and QFontInfo.
Calling this function only has effect under X windows. If raw mode is enabled, Qt will search for an X font with a complete font name matching the family name, ignoring all other values set for the QFont. If the font name matches several fonts, Qt will use the first font returned by X. QFontInfo cannot be used to fetch information about a QFont using raw mode (it will return the values set in the QFont for all parameters, including the family name).
Warning: Do not use raw mode unless you really, really need it! In most (if not all) cases, setRawName() is a much better choise.
See also rawMode() and setRawName().
In Qt 2.0 and later, a font set with setRawName() is still a full-featured QFont. It can be queried (for example with italic()) or modified (for example with setItalic() ) and is therefore also suitable as a basis font for rendering rich text.
If Qt's internal font database cannot resolve the raw name, the font becomes a raw font with name as family.
Note that the present implementation does not handle handle wildcards in XLFDs well, and that font aliases (file fonts.alias in the font directory on X11) are not supported.
See also rawName(), setRawMode(), and setFamily().
See also strikeOut() and QFontInfo.
See also
The style hint has a default value of AnyStyle which leaves the task of finding a good default family to the font matching algorithm.
The style strategy has a default value of PreferDefault which tells the algorithm not to prefer any type of font.
In the example below the push button will display its text label with the Bavaria font family if this family is available, if not it will display its text label with another serif font:
#include <qapplication.h>
#include <qpushbutton.h>
#include <qfont.h>
int main( int argc, char **argv )
{
QApplication app( argc, argv );
QPushButton push("Push me");
QFont font( "Bavaria", 18 ); // preferred family is Bavaria
font.setStyleHint( QFont::Serif ) // can also use any serif font
push.setFont( font );
return app.exec( &push );
}
See also QFont::StyleHint, styleHint(), QFont::StyleStrategy, styleStrategy(), and QFontInfo.
See also underline() and QFontInfo.
Example:
QFont font( "courier" );
font.setWeight( QFont::Bold );
Strictly speaking you can use all values in the range [0,99] (where 0 is ultralight and 99 is extremely black), but there is perhaps asking too much of the underlying window system.
If the specified weight is not available the closest available will be used. Use QFontInfo to check the actual weight.
See also weight() and QFontInfo.
Use QFontInfo to find the strike out value of the window system font actually used.
See also setStrikeOut() and QFontInfo::strikeOut().
See also setStyleHint() and QFontInfo::styleHint().
See also setStyleHint().
If there is no substitution for familyName, then familyName is returned.
Example:
QFont::insertSubstitution( "NewYork", "London" );
QFont::insertSubstitution( "Paris", "Texas" );
QFont::substitute( "NewYork" ); // returns "London"
QFont::substitute( "PARIS" ); // returns "Texas"
QFont::substitute( "Rome" ); // returns "Rome"
QFont::removeSubstitution( "newyork" );
QFont::substitute( "NewYork" ); // returns "NewYork"
See also setFamily(), insertSubstitution(), and removeSubstitution().
See also insertSubstitution(), removeSubstitution(), and substitute().
Use QFontInfo to find the underline value of the window system font actually used for drawing.
See also setUnderline() and QFontInfo::underline().
Use QFontInfo to find the weight of the window system font actually used.
See also setWeight() and QFontInfo.
See also Format of the QDataStream operators.
See also Format of the QDataStream operators.
This file is part of the Qtopia platform, copyright © 1995-2005 Trolltech, all rights reserved.
| Copyright © 2005 Trolltech | Trademarks | Qtopia version 2.2.0
|