我正在使用以下方法绘制给定角色的字形轮廓:
QString myfname="FreeMono.ttf";
QRawFont *myfont=new QRawFont(myfname,324,QFont::PreferDefaultHinting);
QChar mychars[]={'Q','B'};
int numofchars=3;
quint32 myglyphindexes[3];
int numofglyphs;
myfont->glyphIndexesForChars(mychars,numofchars,myglyphindexes,&numofglyphs);
QPainterPath mypath=myfont->pathForGlyph(myglyphindexes[0]);
我使用
在pixmap上绘制这条路径painter.drawPath(mypath)
我想知道如何绘制这条路径。 我指的是这个轮廓包含的曲线或线条的类型。 为此,我尝试了这个:
QPointF mypoints[49];
for(int i=0; i<mypath.elementAt(i); i++)
{
mypoints[i]=mypath.elementAt(i);
}
这给了我一系列的观点。 但是如何使用直线或曲线将这些点相互连接起来。我怎么知道? 这也是一种正确的方法吗? 我需要改进什么?
答案 0 :(得分:2)
QPainterPath::elementAt()
返回QPainterPath::Element类型的对象,而不是QPoint
(它定义了QPointF运算符)。
您可以使用以下代码:
const QPainterPath::Element &elem = path.elementAt(ii);
// You can use the type enum.
qDebug() << elem.type;
// Or you can use the functions.
if (elem.isCurveTo()) {
qDebug() << "curve";
} else if (elem.isLineTo()) {
qDebug() << "line";
} else if (elem.isMoveTo()) {
qDebug() << "move";
}
答案 1 :(得分:1)
sashoalm是正确的,但我想补充一点,您可以使用path.elementCount()
来了解QPainterPath
中有多少元素。
因此,它看起来像这样:
for(int i=0; i<mypath.elementCount(); i++)
{
const QPainterPath::Element & elem = mypath.elementAt(i);
qDebug() << elem.type;
// Or you can use the functions.
if (elem.isCurveTo()) {
qDebug() << "curve";
} else if (elem.isLineTo()) {
qDebug() << "line";
} else if (elem.isMoveTo()) {
qDebug() << "move";
}
}