2

我在 Mac OS X 10.6.3 上的 Qt 上发现了一些问题:

QFont font = QFont("Wingdings");    //font.family() == "Wingdings"
QRawFont rawFont = QRawFont::fromFont(font);    //rawFont.familyName() == "Lucida Grande"

我认为 rawFont.familyName() 应该是“Wingdings”。在 Windows 上,此代码可以正常工作。

我试过这个方法:

QRawFont ( const QString & fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting )

在字体文件上,它可以正常工作。

我真的不知道如何纠正这个。任何帮助表示赞赏。

4

1 回答 1

0

可能已经发现了一个错误。

如果您查看4.8 的 QRawFont::fromFont 实现,您会看到:

[...]
#if defined(Q_WS_MAC)   
    QTextLayout layout(QFontDatabase::writingSystemSample(writingSystem), font);
    layout.beginLayout();
    QTextLine line = layout.createLine();
    layout.endLayout();
    QList<QGlyphRun> list = layout.glyphRuns();
    if (list.size()) {
        for (int i = 0; i < list.size(); i++) {
            rawFont = list.at(i).rawFont();
            if (rawFont.familyName() == font.family())
                return rawFont;
        }
        return list.at(0).rawFont();
    }
#else
[...]

显然,这种方法是 Mac OS X 上的 hack。该方法在 HEAD 修订版(大概是 5.x)中发生了变化,并且不再有针对 OS X 的 hack。

于 2012-09-26T10:16:55.093 回答