[Qt教程] 第13篇 2D繪圖(三)繪製文字
樓主
發表於 2013-4-25 23:04:46 | 查看:
720| 回複: 0

繪製文字
版權聲明
該文章原創於Qter開源社區,作者yafeilinux,轉載請注明出處!
導語
Qt中除了繪製圖形以外,還可以使用QPainter::darwText()函數來繪製文字,也可以使用QPainter::setFont()設置文字所使用的字體,使用QPainter::fontInfo()函數可以獲取字體的信息,它返回QFontInfo類對象。在繪製文字時會默認使用抗鋸齒。
環境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2
目錄
一、基本繪製
二、控製文字的位置
三、使用字體
正文
一、基本繪製
我們接著在上一節的項目上進行講解,首先將paintEvent()函數更改如下:
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawText(100, 100, "qter.org_yafeilinux");
}
這樣就在(100, 100)的位置繪製了一個字符串。效果如下圖所示。
![]() 二、控製文字的位置
1. 我們先到QPainter的幫助文檔頁麵,然後查看drawText()函數的重載形式,找到:
QPainter::drawText ( const QRectF &rectangle, int flags, const QString & text, QRectF * boundingRect = 0 ),如下圖所示。
![]() 它的第一個參數指定了繪製文字所在的矩形;第二個參數指定了文字在矩形中的對齊方式,它由Qt::AlignmentFlag枚舉變量進行定義,不同對齊方式也可以使用“|”操作符同時使用,這裏還可以使用Qt::TextFlag定義的其他一些標誌,比如自動換行等;第三個參數就是所要繪製的文字,這裏可以使用“\n”來實現換行;第四個參數一般不用設置。
2.下麵我們來看一個例子。為了更明顯的看到文字在指定矩形中的位置,我們繪製出這個矩形。將paintEvent()函數更改如下:
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
//設置一個矩形
QRectF rect(20, 20, 300, 200);
//為了更直觀地看到字體的位置,我們繪製出這個矩形
painter.drawRect(rect);
painter.setPen(QColor(Qt::red));
//我們這裏先讓字體水平居中
painter.drawText(rect, Qt::AlignHCenter, "yafeilinux");
}
現在運行程序,效果如下圖所示。
![]() 可用的對齊方式如下圖所示。
![]() 三、使用字體
為了繪製漂亮的文字,可以使用QFont類來設置文字字體。大家也可以先在幫助文檔中查看該類的介紹。下麵將最常用的一些設置進行演示。
在paintEvent()函數中繼續添加如下代碼:
QFont font("宋體", 15, QFont::Bold, true);
//設置下劃線
font.setUnderline(true);
//設置上劃線
font.setOverline(true);
//設置字母大小寫
font.setCapitalization(QFont::SmallCaps);
//設置字符間的間距
font.setLetterSpacing(QFont::AbsoluteSpacing, 10);
//使用字體
painter.setFont(font);
painter.setPen(Qt::green);
painter.drawText(120, 80, tr("yafeilinux"));
painter.translate(50, 50);
painter.rotate(90);
painter.drawText(0, 0, tr("helloqt"));
這裏創建了QFont字體對象,使用的構造函數為QFont::QFont
( const QString & family,int pointSize = -1, int weight = -1, bool italic = false ),第一個參數設置字體的family屬性,這裏使用的字體族為宋體,可以使用QFontDatabase類來獲取所支持的所有字體;第二個參數是點大小,默認大小為12;第三個參數為weight屬性,這裏使用了粗體;最後一個屬性設置是否使用斜體。然後我們又使用了其他幾個函數來設置字體的格式,最後調用setFont()函數來使用該字體,並使用drawText()函數的另一種重載形式在點(120,
80)繪製了文字。後麵又將坐標係統平移並旋轉,然後再次繪製了文字。運行程序,效果如下圖所示。
![]() 結語
這一節最後的例子中使用了rotate()函數來旋轉坐標係統,從而繪製出了縱向的文字。這個將會在後麵的篇章中介紹到。
涉及到的源碼下載: ![]() |
最後更新:2017-04-03 14:54:08