如何在 OpenSuse 上的 Qt 中访问 Awesomefonts
How do I access Awesomefonts in Qt on OpenSuse
我希望在我的 Qt 应用程序中使用 fontawesome (http://fontawesome.io/icons) 中的一些图标,我已将 fontawesome-webfont.ttf 文件提取到 usr/share/fonts。我尝试在线搜索但找不到任何这样的 examples.This 是我编写的示例代码,用于从资源中提取图像(不是必需的)并访问 Qfont 库本身存在的一些 Qfonts。(即 courier以下示例中的新内容)。
#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;
}
再次感谢
编辑:错误的截图
编辑 2:尝试 G.M. 的方法导致以下错误:知道为什么吗?
尝试使用...显式加载字体
int fid = QFontDatabase::addApplicationFont("/usr/share/fonts/fontawesome-webfont.ttf");
然后您可以使用...查询字体系列名称...
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 提供的答案可能是一种更好的方法。为了完整起见,我只是添加此编辑。
从 https://github.com/dridk/QFontIcon 下载 qfonticon.h
和 qfonticon.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;
}
更多信息:https://github.com/dridk/QFontIcon
我用 Qt 5.7 和 Qtcreator 4.2 测试过
我希望在我的 Qt 应用程序中使用 fontawesome (http://fontawesome.io/icons) 中的一些图标,我已将 fontawesome-webfont.ttf 文件提取到 usr/share/fonts。我尝试在线搜索但找不到任何这样的 examples.This 是我编写的示例代码,用于从资源中提取图像(不是必需的)并访问 Qfont 库本身存在的一些 Qfonts。(即 courier以下示例中的新内容)。
#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;
}
再次感谢
编辑:错误的截图
编辑 2:尝试 G.M. 的方法导致以下错误:知道为什么吗?
尝试使用...显式加载字体
int fid = QFontDatabase::addApplicationFont("/usr/share/fonts/fontawesome-webfont.ttf");
然后您可以使用...查询字体系列名称...
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 提供的答案可能是一种更好的方法。为了完整起见,我只是添加此编辑。
从 https://github.com/dridk/QFontIcon 下载 qfonticon.h
和 qfonticon.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;
}
更多信息:https://github.com/dridk/QFontIcon
我用 Qt 5.7 和 Qtcreator 4.2 测试过