如何决定painter.drawPath(QPainterPath)绘制的元素类型

时间:2013-09-11 06:34:51

标签: c++ qt qpainter

我正在使用以下方法绘制给定角色的字形轮廓:

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);
    }

这给了我一系列的观点。 但是如何使用直线或曲线将这些点相互连接起来。我怎么知道? 这也是一种正确的方法吗? 我需要改进什么?

2 个答案:

答案 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";
    }
}