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
}
}
我在 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
}
}