日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Qt教程] 第13篇 2D绘图(三)绘制文字

發(fā)布時(shí)間:2024/4/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Qt教程] 第13篇 2D绘图(三)绘制文字 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

樓主 ?發(fā)表于 2013-4-25 23:04:46?|?查看: 720|?回復(fù): 0
繪制文字 版權(quán)聲明
該文章原創(chuàng)于Qter開源社區(qū),作者yafeilinux,轉(zhuǎn)載請注明出處!


導(dǎo)語
Qt中除了繪制圖形以外,還可以使用QPainter::darwText()函數(shù)來繪制文字,也可以使用QPainter::setFont()設(shè)置文字所使用的字體,使用QPainter::fontInfo()函數(shù)可以獲取字體的信息,它返回QFontInfo類對象。在繪制文字時(shí)會默認(rèn)使用抗鋸齒。

環(huán)境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2


目錄
一、基本繪制 二、控制文字的位置 三、使用字體


正文

一、基本繪制
我們接著在上一節(jié)的項(xiàng)目上進(jìn)行講解,首先將paintEvent()函數(shù)更改如下: void?MainWindow::paintEvent(QPaintEvent?*) { ? ??QPainter?painter(this); ? ??painter.drawText(100,?100,?"qter.org_yafeilinux"); }
這樣就在(100, 100)的位置繪制了一個字符串。效果如下圖所示。



二、控制文字的位置

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

它的第一個參數(shù)指定了繪制文字所在的矩形;第二個參數(shù)指定了文字在矩形中的對齊方式,它由Qt::AlignmentFlag枚舉變量進(jìn)行定義,不同對齊方式也可以使用“|”操作符同時(shí)使用,這里還可以使用Qt::TextFlag定義的其他一些標(biāo)志,比如自動換行等;第三個參數(shù)就是所要繪制的文字,這里可以使用“\n”來實(shí)現(xiàn)換行;第四個參數(shù)一般不用設(shè)置。

2.下面我們來看一個例子。為了更明顯的看到文字在指定矩形中的位置,我們繪制出這個矩形。將paintEvent()函數(shù)更改如下:
void?MainWindow::paintEvent(QPaintEvent?*) { ? ??QPainter?painter(this); ? ??//設(shè)置一個矩形 ? ??QRectF?rect(20,?20,?300,?200); ? ??//為了更直觀地看到字體的位置,我們繪制出這個矩形 ? ??painter.drawRect(rect); ? ??painter.setPen(QColor(Qt::red)); ? ??//我們這里先讓字體水平居中 ? ??painter.drawText(rect,?Qt::AlignHCenter,?"yafeilinux"); }
現(xiàn)在運(yùn)行程序,效果如下圖所示。


可用的對齊方式如下圖所示。


三、使用字體
為了繪制漂亮的文字,可以使用QFont類來設(shè)置文字字體。大家也可以先在幫助文檔中查看該類的介紹。下面將最常用的一些設(shè)置進(jìn)行演示。 paintEvent()函數(shù)中繼續(xù)添加如下代碼:
QFont?font("宋體",?15,?QFont::Bold,?true); //設(shè)置下劃線 font.setUnderline(true); //設(shè)置上劃線 font.setOverline(true); //設(shè)置字母大小寫 font.setCapitalization(QFont::SmallCaps); //設(shè)置字符間的間距 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"));
? ??這里創(chuàng)建了QFont字體對象,使用的構(gòu)造函數(shù)為QFont::QFont ( const QString & family,int pointSize = -1, int weight = -1, bool italic = false ),第一個參數(shù)設(shè)置字體的family屬性,這里使用的字體族為宋體,可以使用QFontDatabase類來獲取所支持的所有字體;第二個參數(shù)是點(diǎn)大小,默認(rèn)大小為12;第三個參數(shù)為weight屬性,這里使用了粗體;最后一個屬性設(shè)置是否使用斜體。然后我們又使用了其他幾個函數(shù)來設(shè)置字體的格式,最后調(diào)用setFont()函數(shù)來使用該字體,并使用drawText()函數(shù)的另一種重載形式在點(diǎn)(120, 80)繪制了文字。后面又將坐標(biāo)系統(tǒng)平移并旋轉(zhuǎn),然后再次繪制了文字。運(yùn)行程序,效果如下圖所示。



結(jié)語
? ?? ??這一節(jié)最后的例子中使用了rotate()函數(shù)來旋轉(zhuǎn)坐標(biāo)系統(tǒng),從而繪制出了縱向的文字。這個將會在后面的篇章中介紹到。



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

總結(jié)

以上是生活随笔為你收集整理的[Qt教程] 第13篇 2D绘图(三)绘制文字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。