爲了管理Qt應用程序中的字體,您可以使用QFontDatabase
,它提供有關底層窗口系統中可用字體的信息。 該類有幾個靜態成員,它們將允許您以編程方式將字體添加到應用程序中。你甚至可以嵌入字體作爲資源,並仍然可以加載它們。
我會發佈一個真實世界的例子。假設您下載了名爲「Helvetica Neue」的字體系列,並且希望將其提供給您的應用程序。嵌入式方法如下。
1 - 將所有.ttf文件添加爲資源。
2 - 爲每個.ttf文件調用addApplicationFont()
。
QFontDatabase fontDB;
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 35 Thin.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 36 Thin Italic.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 55 Roman.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 56 Italic.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 75 Bold.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 56 Bold Italic.ttf");
3 - 你完成了。您現在可以執行以下操作來檢查「Helvetica Neue」字體家族是否在那裏。
for (int i = 0; i < fontDB.families().size(); ++i)
qDebug() << fontDB.families().at(i);
因此,無論您在程序中設置字體「Helvetica Neue」,它都會被找到。
這是非常明顯的,但如果你不想逐字地加載字體到你的應用程序,它很容易管理。例如,以下(和幼稚的)代碼片段將嘗試加載特定文件夾中的所有文件,就好像它們是字體一樣。
QDir myFontsDirectory("myfonts");
if (!myFontsDirectory.exists())
{
qWarning("Cannot find the directory");
}
else
{
QFileInfoList list = myFontsDirectory.entryInfoList();
for (int i = 0; i < list.size(); ++i)
{
QFileInfo fileInfo = list.at(i);
fontDB.addApplicationFont(fileInfo.filePath());
}
}
嗯,所以我必須分叉它,並添加自定義目錄中的所有字體。我想我會在「最後的手段」下提交此文件,因爲它看起來好像會起作用。 – Trejkaz 2014-09-02 05:21:26
您也可以嘗試註冊'QT_QWS_FONTDIR'環境變量(以前我也試過沒有任何運氣的東西),或嘗試使用系統字體文件夾執行系統範圍的東西,該文件夾可以通過以下方式獲得:'QStandardPaths :: writableLocation(QStandardPaths: :FontsLocation)'。但我並不真的喜歡這個,我真的不認爲這會是一個簡單的解決方案。我遇到了和你一樣的問題,我仍然認爲使用'QFontDatabase'管理應用程序字體是可取的。 – mhcuervo 2014-09-02 12:49:30