2017-01-05 32 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,则存在问题。 –