Как использовать Font Awesome в QML

Кто-нибудь знает, как использовать Font Awesome в QML? Я не смог найти ни одного документа или информации о том, как использовать Font Awesome в QML.


person NTMS    schedule 13.12.2017    source источник


Ответы (4)


Мне нравится использовать fontello для создания минимального набора значков, а не загружать весь набор с FontAwesome. Используя текстовый редактор в качестве примера:

  1. Загрузите шрифт и сохраните его где-нибудь в каталоге вашего проекта. В примере он находится в папке fonts.
  2. Если вы используете файлы .qrc в своем проекте, добавьте их в один из них.
  3. Я могу придумать два способа распознать шрифт в вашем QML: FontLoader и QFontDatabase::addApplicationFont(). Чтобы использовать QFontDatabase::addApplicationFont(), добавьте это перед загрузкой QML вашего приложения:

    QFontDatabase fontDatabase;
    if (fontDatabase.addApplicationFont(":/fonts/fontello.ttf") == -1)
        qWarning() << "Failed to load fontello.ttf";
    
  4. Используйте коды Unicode в свойстве text любой элемент, значок которого вы хотите отобразить в:

    ToolButton {
        id: openButton
        text: "\uF115" // icon-folder-open-empty
        font.family: "fontello"
        onClicked: openDialog.open()
    }
    
person Mitch    schedule 13.12.2017
comment
Спасибо, @Mitch, ты спас мой день. - person NTMS; 13.12.2017
comment
Поскольку FontLoader просто использует QFontDatabase::addApplicationFont() под капотом, нельзя ли использовать его таким же образом с font.family как строку без использования FontLoader id? - person GrecKo; 13.12.2017
comment
Возможно, я не удосужился проверить так далеко, просто отошел от документации, которая использует его с id: doc.qt.io/qt-5/qml-qtquick-fontloader.html - person Mitch; 13.12.2017

Здесь есть решение: https://martin.rpdev.net/2018/03/30/using-fontawesome-5-in-qml.html

Я лично смешал его с этим решением для FontAwesome 4.7, что дало мне следующее:

Item {
    id: awesome

    property alias icons: variables

    readonly property FontLoader fontAwesomeRegular: FontLoader {
        source: "./fa-regular-400.ttf"
    }
    readonly property FontLoader fontAwesomeSolid: FontLoader {
        source: "./fa-solid-900.ttf"
    }
    readonly property FontLoader fontAwesomeBrands: FontLoader {
        source: "./fa-brands-400.ttf"
    }

    readonly property string regular: fontAwesomeRegular.name
    readonly property string solid: fontAwesomeSolid.name
    readonly property string brands: fontAwesomeBrands.name

    Awesome.Variables {
        id: variables
    }
}

И Awesome.Variables — это еще один файл, в котором я связал имена значков с кодом их символов. Вот отрывок:

QtObject {
    readonly property string fa_500px                               : "\uf26e"
    readonly property string fa_accessible_icon                     : "\uf368"
    readonly property string fa_accusoft                            : "\uf369"
    readonly property string fa_address_book                        : "\uf2b9"
    readonly property string fa_address_card                        : "\uf2bb"
}

Для того, чтобы его использовать, я загружаю его в свой корень Item, или в тот, где мне нужна такая иконка:

FontAwesome {
     id: awesome
}

Затем используйте его следующим образом:

Text{
    iconFont: awesome.solid
    text: awesome.icons.fa_arrow_up
}
person SThor    schedule 21.08.2018
comment
Я создал скрипт для автоматизации создания шрифтов значков, и он генерирует компонент QML в соответствии с шаблоном, упомянутым в ответе. github.com/mnesarco/ff-batch - person mnesarco; 06.12.2020

Очевидно, сегодня это намного проще, чем когда были опубликованы предыдущие ответы.

Перейдите на домашнюю страницу FontAwesome, найдите нужный значок и загрузите его в формате SVG. Скажем, bars-solid.svg (значок меню-гамбургер).

В Qt Creator добавьте его, скажем, как qml.qrc/images/bars-solid.svg.

В разметке QML добавьте его как значение свойства, например, icon.source: "images/bars-solid.svg"

person user240515    schedule 23.04.2020

Если вам нужно решение только для QML для загрузки шрифта:

FontLoader {
    source: "fontawsome.ttf"
    Component.onCompleted: console.log(name)
}
person Khushal Khan Liwal    schedule 05.06.2021