有没有人知道是否可以使用FreeType构建Qt5作为Windows上的文本渲染器而不是原生渲染器?我尝试用-qt-freetype编译Qt5,但我仍然得到错误的文本。我还需要做点什么吗?
答案 0 :(得分:4)
在查看DeadWarlock提出的解决方案时,我研究了Qt源代码,并意识到QWindowsFontDatabaseFT是在d->m_options & QWindowsIntegration::FontDatabaseFreeType
为true
时创建和使用的。经过一番谷歌搜索后,我发现打开此选项是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下创建。我不记得确实可能需要在其他地方添加更改。上次我很久以前在我的家庭项目中做这个。但现在你知道需要挖掘的方式。
附:
如果找到另一种解决方案,请写在这里。感谢。