Я создал тестовое приложение QML, чтобы показать размер экрана.

Тестировалось на Xiaomi Redmi 6. Разрешение экрана устройства 720 x 1440 пикселей.

У меня 360 x 696. Есть идеи?

Windows 7 64-битная, Qt 5.14.1, jdk1.8.0_241.

Main.qml :

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 720
    height: 1440
    title: qsTr("Hello World")

    Column {
        anchors.centerIn: parent

        Text {
            text: "Screen.width: " + Screen.width
            color: "lightsteelblue"
        }

        Text {
            text: "Screen.height: " + Screen.height
            color: "lightsteelblue"
        }
    }

    MouseArea {
        anchors.fill: parent
        onClicked: {
            // ScreenSize == QGuiApplication::primaryScreen()->size()
            console.log( ScreenSize.height, ScreenSize.width);
        }
    }

}

Вывод консоли:

D libTest2_armeabi-v7a.so: qml: 696 360

Screenshot

1
Denis 25 Мар 2020 в 19:57
Что возвращает Screen.devicePixelRatio?
 – 
Frank Osterfeld
26 Мар 2020 в 09:59
Screen.devicePixelRatio = 2, Screen.pixelDensity = 5,8032258064516125
 – 
Denis
26 Мар 2020 в 10:27
Следующий код Java в Android Studio,{} ` Показатели DisplayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(метрики); Log.d("MY_DEBUG", "WIDTH = " + Float.toString(metrics.widthPixels)); Log.d("MY_DEBUG", "HEIGHT = " + Float.toString(metrics.heightPixels)); ` полученный результат: ` 2020-03-26 13:48:12.097 9773-9773/? D/MY_DEBUG: WIDTH = 720.0 2020-03-26 13:48:12.097 9773-9773/? D/MY_DEBUG: ВЫСОТА = 1344,0 `
 – 
Denis
26 Мар 2020 в 11:51
Ожидается, что 360x696 — это «логическое разрешение», используемое для координат в QtQuick, масштабирования шрифта и т. д. 720x1440 — это физическое разрешение реальных пикселей. devicePixelRatio 2 — это множитель между ними.
 – 
Frank Osterfeld
26 Мар 2020 в 15:51

1 ответ

Я сделал так: Осведомленность о DPI.
Этот ответ помог мне.

int main(int argc, char *argv[])
{
    argc = 3;
    argv[0] = (char*)"Appname";
    argv[1] = (char*)"--platform";
    argv[2] = (char*)"android:dpiawareness=0";

    QGuiApplication app(argc, argv);
    ...
}

Я изменил "Windows" на "Android".
Теперь все работает правильно.
Хотя эта функция не предназначена для Android.
После того, как я удалю строку кода добавления, она все равно работает правильно.
Приложение хорошо работает в исходном состоянии. Что-то переключилось на Qt.

0
Denis 26 Мар 2020 в 15:45