2017-01-05 92 views
1

我想在我的Qt應用程序中使用fontawesome中的一些圖標(http://fontawesome.io/icons),我已經將fontawesome-webfont.ttf文件解壓縮到usr/share/fonts.I嘗試搜索在線,但找不到任何這樣的例子。這是我編寫的示例代碼,用於從資源中提取圖像(不是必需的),還訪問Qfont庫中存在的一些Qfonts。(即快遞新在下面的例子中)。如何在OpenSuse中訪問Qt中的Awesomefonts

#include "MainWindow.h" 
#include "ui_MainWindow.h" 
#include <QPixmap> 
#include <QLabel> 
#include <QHBoxLayout> 
MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    centralWidget = new QWidget(this); 
    gridLayout = new QGridLayout(centralWidget); 
    mylabel = new QLabel(); 
    mylabel2= new QLabel(); 

    font = new QFont("courier"); 
    addresspic = new QPixmap(":/new/prefix1/address.png"); 
    *addresspic=addresspic->scaled(50,50,Qt::KeepAspectRatio, Qt::FastTransformation); 
    mylabel->setPixmap(*addresspic); 

    mylabel2->setTextFormat(Qt::RichText); 
    mylabel2->setGeometry(QRect(QPoint(100,100),QSize(150, 150))); 
    mylabel2->setText(" ADDRESS ICON "); 
    gridLayout->addWidget(mylabel2); 
    gridLayout->addWidget(mylabel); 
    font->setItalic(true); 
    font->setPixelSize(20); 
    mylabel2->setFont(*font); 


// gridLayout->setVerticalSpacing(1); 
// gridLayout->setHorizontalSpacing(1); 

    this->setCentralWidget(centralWidget); 


} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

再次感謝

編輯:錯誤的屏幕截圖enter image description here

編輯2:試圖G.M.的方法導致以下錯誤:任何想法,爲什麼? enter image description here

+0

嘗試:字體=新QFont( 「fontawesome-web字體」); – eyllanesc

+0

@ eyllanesc它不工作,qt如何知道從哪裏訪問圖標 – theindianphil1

+0

您是否在複製文件後更新字體緩存?那將是'sudo fc-cache -fv'。 –

回答

3

https://github.com/dridk/QFontIcon下載和qfonticon.hqfonticon.cpp文件添加到您的項目,然後創建下面的代碼的圖標:

QFontIcon::addFont("/path/your/fonts/{your font}.ttf"); 
QIcon icon = QFontIcon::icon(0xf2b9); 

{your widget}->setIcon(icon); 

例子:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

#include <QPushButton> 
#include "qfonticon.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QWidget *centralWidget; 
    QGridLayout *gridLayout; 

    centralWidget = new QWidget(this); 
    gridLayout = new QGridLayout(centralWidget); 

    QFontIcon::addFont("/usr/share/fonts/fontawesome-webfont.ttf"); 


    for(int i = 0; i < 15; i++){ 
     QIcon icon = QFontIcon::icon(0xf2b9+i); 
     QPushButton *b = new QPushButton(); 
     b->setIcon(icon); 
     gridLayout->addWidget(b); 
    } 
    this->setCentralWidget(centralWidget); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

enter image description here

更多信息https://github.com/dridk/QFontIcon

我使用Qt 5.7和4.2 Qtcreator測試它

+0

很多錯誤都顯示出來了: 'Q_DECL_OVERRIDE'沒有指定類型 虛擬void paint(QPainter *畫家,const QRect&rect,QIcon :: Mode模式,QIcon :: State狀態)Q_DECL_OVERRIDE; /home/adt/Project/Project1/Project2/MainWindow.cpp:12:錯誤:無效的使用不完全類型的 '類UI ::主窗口' UI(新UI ::主窗口) ^^ – theindianphil1

+0

@ theindianphil1 qt4或qt5? – eyllanesc

+0

qt 5.3.2使用qt創建者3.2.1 – theindianphil1

0

嘗試用明確的加載字體...

int fid = QFontDatabase::addApplicationFont("/usr/share/fonts/fontawesome-webfont.ttf"); 

然後,您可以查詢使用字體系列名稱(S)...

QFontDatabase::applicationFontFamilies(fid); 

在我的情況下,上述結果在單一家族名稱「FontAwesome」中。那麼你應該能夠使用的字體與...

QFont f("FontAwesome"); 

注意既然如此:以上似乎不言而喻,但對於指定的字體點大小是不工作作爲工作至今如預期。不知道爲什麼ttf文件似乎包含請求的字形大小。

編輯1 上面構建的QFont可以像任何其他的Unicode字體一樣使用。因此,一個QLabel可以用...

QLabel label; 
label.setFont(QFont("FontAwesome")); 
label.setText("\uf0fe"); /* f0fe is the code point for fa-plus-square */ 

注意,由@eyllanesc提供的答案可能是一個更好的方法來創建。我只是爲了完整而添加這個編輯。

+0

你如何訪問fontawesome-webfont.ttf內的圖標,你也可以分享你的代碼 – theindianphil1

+0

我試過你建議,但輸出是垃圾值。我已經編輯了這個問題,以便你可以看到輸出。任何建議出了什麼問題? – theindianphil1

+0

您在代碼中的'QLabel's中使用'QFont(「FontAwesome」)',但是正在顯示「ADDRESS ICON」文本,就像顯示標準字體一樣。這表明字體未被正確加載。檢查從'QFontDatabase :: addApplicationFont'返回的值 - 如果它是-1,則存在問題。 –