在Windows上使用Qt5和FreeType

6

有没有人知道在Windows上是否可以使用FreeType作为Qt5的文本渲染器而不是本地渲染器?我尝试使用-qt-freetype编译Qt5,但我仍然得到了糟糕的文本。我需要做其他的事情吗?

2个回答

8
当查看DeadWarlock提出的解决方案时,我研究了Qt源代码并意识到当m_options & QWindowsIntegration :: FontDatabaseFreeType>为时,QWindowsFontDatabaseFT被创建和使用。经过一番搜索,我发现在Qt中官方文档中正式记录了打开此选项的方法。可以通过创建文件来打开该选项。该文件必须位于包含应用程序可执行文件的目录中,并且必须包含以下内容:
[Platforms]
WindowsArguments = fontengine=freetype

在执行这个步骤后,我成功地实现了freetype渲染,而无需重新编译Qt。


或者您可以使用命令行参数 -platform windows:fontengine=freetype - Croessmah

2

使用freetype的Qt - 老实说,这真是一件麻烦的事情。即使你打开了它,输出的字形看起来也不像裸露的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;
}

我给你一个提示 - 在Windows下,QWindowsFontDatabaseFT永远不会被创建。我不记得确切的情况,可能需要在其他地方做出改变。上一次我做这个是很久以前在我的家庭项目中。但现在你知道需要怎么挖掘了。
附言: 如果找到另一个解决方案,请在这里写下来。谢谢。


@user1284878 我的回答有帮到你吗?还是你有不明白的地方?向我提问,我会尽力指导你。 - DeadWarlock
你可能会对我的答案感兴趣。 - Martin Stangel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接