2013-12-23 27 views
6

我創建的Qt的靜態版本5.2.0庫使用這些配置選項(Ubuntu的12.04):在Linux上構建靜態Qt5:如何在部署時處理字體?

-opensource -confirm許可證 -force-pkg配置 - 釋放 -static - 前綴 '/家/ juzzlin/QT5' -no-ICU -opengl桌面 -no-巧舌如簧 -accessibility -nomake例子 -nomake測試 -qt-zlib的 -qt-libpng的 -qt-的libjpeg -qt-SQL sqlite的 -qt-XCB -qt-PCRE -v

現在的問題是,當我已經編譯和鏈接我對這些的Qt庫的應用程序,它會嘗試加載字體從Qt安裝路徑/home/juzzlin/qt5/lib/fonts。這應該如何工作?該應用程序適用於我用來編譯它的機器,但不適用於其他機器。我也不想用應用程序將Qt內容安裝到某些系統目錄,因爲應用程序不應該這樣做。

這是錯誤我得到:

QFontDatabase:找不到字體目錄/ home/juzzlin/QT5/lib中/字體 - 在Qt的正確安裝?

如何強制它在其他目錄中搜索字體?

我不明白的另一件事是,爲什麼我在與Windows交叉編譯時沒有同樣的問題MXE?在編譯Qt庫時,它使用幾乎相同的配置選項。

回答

15

您可以使用Qt資源系統將字體文件嵌入到您的可執行文件中。

http://qt-project.org/doc/qt-5/resources.html

然後在你的應用程序,你可以加載嵌入字體。

QGuiApplication app(argc, argv); 
QQuickView view; 

// Load the embedded font. 
QString fontPath = ":/fonts/MyFont.ttf"; 
int fontId = QFontDatabase::addApplicationFont(fontPath); 
if (fontId != -1) 
{ 
    QFont font("MyFont"); 
    app.setFont(font); 
} 

我懷疑你的應用程序在你的home目錄,因爲QMAKE硬編碼的路徑不同的資源在編譯時搜索的字體。要查看這些路徑的值,運行:

qmake -query 

您可以通過包括qt.conf文件,您也可以使用Qt資源系統嵌入到可執行文件重寫你的應用程序,這些路徑。

http://qt-project.org/doc/qt-5.0/qtdoc/qt-conf.html

+1

我不知道qt.conf,所以謝謝! :)這解決了我的問題。 – juzzlin

+0

但是,我仍然不明白,爲什麼我不用擔心這個問題,如果我使用預編譯的Qt庫並動態鏈接或使用靜態庫進行交叉編譯。爲什麼這些庫在某些硬編碼位置搜索字體目錄?它一直工作。我在這裏錯過了什麼? – juzzlin

+1

我不是100%確定爲什麼,但我可以推測...我相信Qt 5使用fontconfig來管理字體,並且在不起作用時會退回到/lib/fonts。也許有一個配置選項可以告訴Qt 5在使用xcb平臺插件時使用fontconfig。 – lnthomas