QML UI中的Font Chage

问题描述 投票:0回答:1

我已经开发了一个安卓应用程序 QtQML但是,当我改变我的生活方式时,我就会发现,我的生活方式很好。安卓手机设置 例如显示字体->small to medium or medium to big.It is not applied in my application there is no change in application.How to achieve this change in my application.Thanks in advance.

例如:-如果我改变了安卓手机显示设置的字体大小,那么它就会自动改变每个应用程序的字体大小,如whatsapp,facebook等,但在我的例子中,我用QtQML开发了一个安卓应用程序,它没有改变显示字体大小。

android qt qml settings
1个回答
1
投票

你必须手动操作,使用C++和JNI。

#include <QtAndroidExtras>

然后得到Java QtActivity类。

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");

然后用scale变量设置一个QMLEngine上下文变量。

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

0
投票

@Hubi 你好,我在我的qtqml应用程序中尝试了这个代码,当我使用这个解决方案时,它工作得很好,但问题是当我启动应用程序时,默认情况下,它正在获取资源字体大小,并将该值设置到我的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

           }
       }
© www.soinside.com 2019 - 2024. All rights reserved.