Qml:与Monospace / Normal字体无关的平台方式

时间:2017-04-30 10:32:37

标签: c++ qt fonts qml qtquick2

有没有办法将font.family切换为"正常"和" monospace"在Qml中以独立于平台的方式?

Label {
   font.family: "Monospace"
}

目前我独立设置每个平台的字体。使用应用程序传送字体也是没有选择的,因为文本很可能是系统的语言(例如用户界面是英文但文本可能在Parsi中)。

此致

1 个答案:

答案 0 :(得分:1)

似乎this question的已接受答案有效,因此您可以将该字体作为上下文属性公开给QML:

<强> main.cpp中:

#include <QApplication>
#include <QFontDatabase>
#include <QQmlApplicationEngine>
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
    engine.rootContext()->setContextProperty("fixedFont", fixedFont);
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));

    return app.exec();
}

<强> main.qml:

import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 2.0

Window {
    width: 400
    height: 400
    visible: true

    Switch {
        id: monospaceSwitch
    }

    Text {
        text: "Hello World"
        font: monospaceSwitch.checked ? fixedFont : Qt.application.font
        anchors.centerIn: parent
    }
}

这假设系统中存在等宽字体。