From Gossip@caterpillar

Qt3 Gossip: QPainter 類別 - 文字繪製

QPainter 類別中的drawText()方法可以在繪圖裝置上繪製文字,也可以設定繪製時所用的字型,在設定好字型之後,我們可以用fontMetrics()方法 取得字型的幾何資訊,例如ascent(字元最高點至字元底線baseline距離)、descent(字元最低點到字元底線距離)、leading(兩 行之間的空間值)height(字體印字時的高度,相當於 ascent+descent +1,1pixel是字元底線的高度)與linespacing(height+leading)等等。


下面這個程式是文字繪製的簡單示範,利用迴圈展示三種字型、五種大小不同組合下的文字繪製效果:

#include <qapplication.h>
#include <qwidget.h>
#include <qpainter.h>
#include <qpen.h>
#include <qpixmap.h>
#include <qdrawutil.h>

class DrawView : public QWidget {
public:
DrawView() {
setBackgroundColor(white);
}

protected:
void drawFonts(QPainter*);
void paintEvent(QPaintEvent*);
};

void DrawView::drawFonts(QPainter *p) {
p->save();
static const char *fonts[] = {"Helvetica", "Courier", "Times", 0};
static int sizes[] = {10, 12, 18, 24, 36, 0};
int f = 0;
int y = 0;
while (fonts[f]) {
int s = 0;
while (sizes[s]) {
QFont font(fonts[f], sizes[s]);
p->setFont(font);
QFontMetrics fm = p->fontMetrics();

y += fm.ascent();
p->drawText(10, y, "Hello! Welcome to caterpillar!");
y += fm.descent();
s++;
}
f++;
}
p->restore();
}

void DrawView::paintEvent(QPaintEvent*) {
QPainter p(this);
drawFonts(&p);
}

int main(int argc, char **argv) {
QApplication app(argc, argv);
DrawView draw;
app.setMainWidget(&draw);
draw.show();
return app.exec();
}

下圖為執行時的結果畫面: