QML 中的字体更改 UI

Font Chage in QML UI

我在 Qt/QML 开发了一个 android 应用程序,它运行良好。 但是,当我更改 Android phone 设置时 例如 显示字体 ->从小到中或从中到大. 它没有应用在我的应用程序中,应用程序没有变化。 如何在我的应用程序中实现此更改。 提前致谢。

示例:- 如果我更改 android phone 显示设置的字体大小,那么它会自动更改每个应用程序 eq.whatsapp、facebook 等的字体大小。 但就我而言,我在 Qt/QML 中开发了一个 android 应用程序,它不会改变显示字体大小。

您必须手动执行此操作并使用 C++ 和 JNI。

#include <QtAndroidExtras>

然后获取JavaQtActivityclass。

QAndroidJniObject qtActivity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");

获取资源:

QAndroidJniObject resources = qtActivity.callObjectMethod("getResources","()Landroid/content/res/Resources;");

获取配置对象并读取字体比例。

QAndroidJniObject configuration = resources.callObjectMethod("getConfiguration","()Landroid/content/res/Configuration;");
float scale = configuration.getField<float>("fontScale");

然后使用比例变量设置 QMLEngine 上下文变量:

engine.rootContext()->setContextProperty("fontScale", scale);

@Hubi 嗨,我在我的 qt/qml 应用程序中试过这段代码。 当我使用这个解决方案时,它工作得很好,但问题是当我默认启动应用程序时,它正在占用资源字体大小并将该值设置为我的 UI 下面提到了我试过的代码。

#include "addnewguestclass.h"

AddNewGuestClass::AddNewGuestClass()
{

    QQmlApplicationEngine *m_View;
    m_View = new QQmlApplicationEngine();
    m_View->load(QUrl(QStringLiteral("qrc:test.qml")));
    //m_View->rootContext()->setContextProperty("AddNewGuest",this);
    //QObject *root = m_View->rootObjects().value(0);

    QAndroidJniObject qtActivity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");

    QAndroidJniObject resources = qtActivity.callObjectMethod("getResources","()Landroid/content/res/Resources;");

    QAndroidJniObject configuration = resources.callObjectMethod("getConfiguration","()Landroid/content/res/Configuration;");
    float scale = configuration.getField<float>("fontScale");
    qDebug()<<"Scale: "<< scale;

    m_View->rootContext()->setContextProperty("fontScale", scale);
}

main.qml

property real dp: screen.pixelDensity * 10 * 2.54 / 160
       Item {
           width: 50*dp
           height: 50*dp
           anchors.centerIn: parent

           Label {
               text: qsTr("Hi, I am Hemant")
               //font.pixelSize: 16*dp
               font.pixelSize: Qt.application.font.pixelSize

           }
       }