MyTetra Share
Делитесь знаниями!
Как задавать размеры элементов в QML для разных устройств Android
Время создания: 13.11.2018 19:57
Текстовые метки: qt, qml, android, размер, элемент, интерфейс, резиновый, относительный
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - QML
Запись: xintrea/mytetra_syncro/master/base/15421282527i4j5lmppw/text.html на raw.github.com

Если детально, то читать вот по этой ссылке статьи снизу-вверх.


Если кратко, то вот код:


#ifdef Q_OS_ANDROID

// BUG with dpi on some androids: https://bugreports.qt-project.org/browse/QTBUG-35701

// Workaround:

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

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

QAndroidJniObject displayMetrics = resources.callObjectMethod("getDisplayMetrics", "()Landroid/util/DisplayMetrics;");

int density = displayMetrics.getField<int>("densityDpi");

#else

QScreen *screen = qApp->primaryScreen();

float density = screen->physicalDotsPerInch();

#endif


engine.rootContext()->setContextProperty("mm",density / 25.4);

engine.rootContext()->setContextProperty("pt", 1);


double scale = density < 180 ? 1 :

density < 270 ? 1.5 :

density < 360 ? 2 : 3;

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


Тут размер в миллиметрах полностью надежен, в девайсонезависимых пикселах приблизителен, как и на Android (но надо бы потестить на соответствующих девайсах), pt для единообразия при указании размеров шрифта.

Использовать очень просто — умножаем размеры в любом месте QML кода:


Rectangle {

height: 20*mm;

width: 40*dp;

}


Все собираюсь написать статью по таким базовым вещам, но руки пока не доходят :/

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования