閱讀654 返回首頁    go 阿裏雲 go 技術社區[雲棲]


[Qt教程] 第13篇 2D繪圖(三)繪製文字

[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)的位置繪製了一個字符串。效果如下圖所示。

13-1.jpg



二、控製文字的位置


1.      我們先到QPainter的幫助文檔頁麵,然後查看drawText()函數的重載形式,找到:
QPainter::drawText ( const QRectF &rectangle, int flags, const QString & text, QRectF * boundingRect = 0 ),如下圖所示。

13-2.jpg

       它的第一個參數指定了繪製文字所在的矩形;第二個參數指定了文字在矩形中的對齊方式,它由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");
}

       現在運行程序,效果如下圖所示。

13-3.jpg


       可用的對齊方式如下圖所示。
13-4.jpg



三、使用字體

為了繪製漂亮的文字,可以使用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)繪製了文字。後麵又將坐標係統平移並旋轉,然後再次繪製了文字。運行程序,效果如下圖所示。

13-5.jpg



結語

       這一節最後的例子中使用了rotate()函數來旋轉坐標係統,從而繪製出了縱向的文字。這個將會在後麵的篇章中介紹到。




涉及到的源碼下載:  painter_1.zip (2.34 KB, 下載次數: 6) 

最後更新:2017-04-03 14:54:08

  上一篇:go raw文件係統
  下一篇:go CSDN的博客搜索功能太弱,教你怎麼搜索自己博客的文章