在Qt5的Windows上使用FreeType

时间:2014-02-08 04:39:21

标签: windows qt5 freetype

有没有人知道是否可以使用FreeType构建Qt5作为Windows上的文本渲染器而不是原生渲染器?我尝试用-qt-freetype编译Qt5,但我仍然得到错误的文本。我还需要做点什么吗?

2 个答案:

答案 0 :(得分:4)

在查看DeadWarlock提出的解决方案时,我研究了Qt源代码,并意识到QWindowsFontDatabaseFT是在d->m_options & QWindowsIntegration::FontDatabaseFreeTypetrue时创建和使用的。经过一番谷歌搜索后,我发现打开此选项是officially documented in Qt。可以通过创建文件qt.conf来启用该选项。该文件必须位于包含应用程序可执行文件的目录中,并且必须包含以下内容:

[Platforms]
WindowsArguments = fontengine=freetype

执行此操作后,我得到了freetype渲染而无需重新编译Qt。

答案 1 :(得分:1)

Qt with freetype - 老实说,这对屁股来说是个巨大的痛苦。因为即使你打开它。输出字形在裸体freetype中看起来不正常,它们会进行一些更改。但是与默认实现相比,它们看起来更好。我知道只有一种方法可以做到这一点(非常糟糕的建议,也许不合法,请不要这样做)。

查找文件:%qt-src%\ qtbase \ src \ plugins \ platforms \ windows \ qwindowsintegration.cpp。这里是需要进行更改的文件中的部分代码:

QPlatformFontDatabase *QWindowsIntegration::fontDatabase() const
{
    if (!d->m_fontDatabase) {
#ifdef QT_NO_FREETYPE
        d->m_fontDatabase = new QWindowsFontDatabase();
#else // QT_NO_FREETYPE
        if (d->m_options & QWindowsIntegration::FontDatabaseFreeType) {
            d->m_fontDatabase = new QWindowsFontDatabaseFT;
        } else if (d->m_options & QWindowsIntegration::FontDatabaseNative){
            d->m_fontDatabase = new QWindowsFontDatabase;
        } else {
#ifndef Q_OS_WINCE
            d->m_fontDatabase = new QWindowsFontDatabase;
#else
            if (isQMLApplication()) {
                if (QWindowsContext::verboseIntegration) {
                    qDebug() << "QML application detected, using FreeType rendering";
                }
                d->m_fontDatabase = new QWindowsFontDatabaseFT;
            }
            else
                d->m_fontDatabase = new QWindowsFontDatabase;
#endif
        }
#endif // QT_NO_FREETYPE
    }
    return d->m_fontDatabase;
}

我给你一个提示 - QWindowsFontDatabaseFT 永远不会在Windows下创建。我不记得确实可能需要在其他地方添加更改。上次我很久以前在我的家庭项目中做这个。但现在你知道需要挖掘的方式。
附: 如果找到另一种解决方案,请写在这里。感谢。