有没有人知道在Windows上是否可以使用FreeType作为Qt5的文本渲染器而不是本地渲染器?我尝试使用-qt-freetype编译Qt5,但我仍然得到了糟糕的文本。我需要做其他的事情吗?
[Platforms]
WindowsArguments = fontengine=freetype
在执行这个步骤后,我成功地实现了freetype渲染,而无需重新编译Qt。
使用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永远不会被创建。我不记得确切的情况,可能需要在其他地方做出改变。上一次我做这个是很久以前在我的家庭项目中。但现在你知道需要怎么挖掘了。
附言:
如果找到另一个解决方案,请在这里写下来。谢谢。
-platform windows:fontengine=freetype
- Croessmah