QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)

您所在的位置:网站首页 windowsttf字体库 QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)

QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)

2024-07-09 14:08| 来源: 网络整理| 查看: 265

MFC版本的从字体名获取字库文件路径点击此处

MFC/QT利用COM组件接口从字体名称、粗体、斜体获取到字体文件路径的方法-CSDN博客

最近弄的一份项目需要裁剪ttf字库,故需要用到此功能!

用了几年QT,个人感觉类库是非常强大的!

QT相比VS的话亮点在开源的类库非常的丰富,几乎无所不能的覆盖到位,以及在大型项目中能轻松实现多语言功能!

唯一美中不足的就是他的gcc开发包非常蛋疼,一旦遇到崩溃闪退bug非常难找,有些根本断不到点,甚至切换成QT+VS+DMP都无法定位的!

------------------------------------------------------------------------------------------------------------

从VC6或VS目录拷贝一份user32.lib与gdi32.lib

在pro文件加两行

LIBS += user32.lib

LIBS += gdi32.lib

#include #include #include #include #include #include #include #include #include #include #include #include #include // Get system font file path std::string GetSystemFontFile(const std::string &faceName) { static const LPWSTR fontRegistryPath = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"; HKEY hKey; LONG result; std::wstring wsFaceName(faceName.begin(), faceName.end()); // Open Windows font registry key result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, fontRegistryPath, 0, KEY_READ, &hKey); if (result != ERROR_SUCCESS) { return ""; } DWORD maxValueNameSize, maxValueDataSize; result = RegQueryInfoKey(hKey, 0, 0, 0, 0, 0, 0, 0, &maxValueNameSize, &maxValueDataSize, 0, 0); if (result != ERROR_SUCCESS) { return ""; } DWORD valueIndex = 0; LPWSTR valueName = new WCHAR[maxValueNameSize]; LPBYTE valueData = new BYTE[maxValueDataSize]; DWORD valueNameSize, valueDataSize, valueType; std::wstring wsFontFile; // Look for a matching font name do { wsFontFile.clear(); valueDataSize = maxValueDataSize; valueNameSize = maxValueNameSize; result = RegEnumValue(hKey, valueIndex, valueName, &valueNameSize, 0, &valueType, valueData, &valueDataSize); valueIndex++; if (result != ERROR_SUCCESS || valueType != REG_SZ) { continue; } std::wstring wsValueName(valueName, valueNameSize); // Found a match if (_wcsnicmp(wsFaceName.c_str(), wsValueName.c_str(), wsFaceName.length()) == 0) { wsFontFile.assign((LPWSTR)valueData, valueDataSize); break; } } while (result != ERROR_NO_MORE_ITEMS); delete[] valueName; delete[] valueData; RegCloseKey(hKey); if (wsFontFile.empty()) { return ""; } // Build full font file path WCHAR winDir[MAX_PATH]; GetWindowsDirectory(winDir, MAX_PATH); std::wstringstream ss; ss


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3