在繪制一條直線(xiàn)時(shí),比如說(shuō)在直線(xiàn)中間輸出文字,如下圖所示
本質(zhì)上不難,定位到位置,然后drawText就可以了
難就難在 文字要跟隨線(xiàn)的斜率,例如
?
?還有,文字最好保證在線(xiàn)的“上方”
首先是角度問(wèn)題
這個(gè)角度跟線(xiàn)Line與X軸夾角是一致的,因此,只要有線(xiàn)兩端坐標(biāo)就可以計(jì)算出來(lái)
這個(gè)不算太難
double getLineAngle(const QLineF& line)
{
QPointF dPoint = QPointF(line.p2().x() - line.p1().x(), line.p2().y() - line.p1().y());
return atan2(dPoint.y(),dPoint.x()) / MATH_PI * 180;
}
剩下就是drawText的時(shí)候要進(jìn)行旋轉(zhuǎn)
看了半天的drawText介紹,發(fā)現(xiàn)沒(méi)有一個(gè)接口是輸入角度的
然后看下QFont一些相關(guān)一些類(lèi),也沒(méi)有發(fā)現(xiàn)輸入旋轉(zhuǎn)角度的,只有一個(gè)斜體的設(shè)置,很顯然不是我們想要的。
經(jīng)過(guò)一番搜索,要對(duì)QPainter進(jìn)行旋轉(zhuǎn),這個(gè)還真有rotate角度函數(shù)。
QLineF reLine = mLine; // mLine就是那條直線(xiàn)
if(mLine.p1().x() > mLine.p2().x())
{
//如果p1在p2的右邊, p1 與 p2 換一換
reLine = QLineF(mLine.p2(),mLine.p1());
}
painter->translate(reLine.p1()); //s1 按照p1為圓點(diǎn),這個(gè)很重要
painter->rotate(getLineAngle(reLine)); //s2 按直線(xiàn)reLine的角度旋轉(zhuǎn)
//s3 輸出drawTxt內(nèi)容,這個(gè)點(diǎn)位置:x在線(xiàn)中間位置,y在線(xiàn)上方-5像素位置;textFontLen是drawTxt字符所占寬度,具體怎么計(jì)算比較好,可以再細(xì)化細(xì)化,這里比較粗
painter->drawText((reLine.length()- textFontLen) / 2,-5, drawTxt); 略
painter->resetMatrix(); // s4 重置坐標(biāo)
以上方法可以實(shí)現(xiàn),如下小視頻所示文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-607915.html
角度線(xiàn)路文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-607915.html
到了這里,關(guān)于Qt圖片編輯 - 在直線(xiàn)添加文字的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!