Qt Android. Получить разрешение экрана устройства

Я развиваю в qt 5.3 на устройстве Android. Я не могу получить разрешение экрана. С старой версией qt 5 этот код работал:

QScreen *screen = QApplication::screens().at(0); largh=screen->availableGeometry().width(); alt =screen->availableGeometry().height(); 

Однако теперь он не работает (возвращает размер экрана 00×00). Есть ли другой способ сделать это? благодаря

Размер поддерживает разрешение пикселей

 screen->size().width() screen->size().height(); 

Принимая во внимание, что availableSize имеет размер, исключающий зарезервированные области оконного менеджера …

 screen->availableSize().width() screen->availableSize().height(); 

Дополнительная информация о классе QScreen .

Я обнаружил, что есть несколько способов получить разрешение устройства, каждый из которых дает те же результаты и, к счастью, работает во всех ОС, поддерживаемых Qt …

1) Моим любимым является написать статическую функцию с помощью QDesktopWidget в ссылочном классе и использовать ее во всем коде:

 QRect const CGenericWidget::getScreenSize() { //Note: one might implement caching of the value to optimize processing speed. This however will result in erros if screen resolution is resized during execution QDesktopWidget scr; return scr.availableGeometry(scr.primaryScreen()); } 

Затем вы можете просто вызвать через свой код такую ​​функцию:

 qDebug() << CGenericWidget::getScreenSize(); 

Он вернет вам объект QRect const, который вы можете использовать для получения размера экрана без верхних и нижних баров.

2) Еще один способ получить разрешение экрана, которое отлично работает, если ваше приложение полноэкранное:

 QWidget *activeWindow = QApplication::activeWindow(); m_sw = activeWindow->width(); m_sh = activeWindow->height(); 

3) И, конечно же, у вас есть выбор, который рекомендовал Зевс:

 QScreen *screen = QApplication::screens().at(0); largh=screen->availableSize().width(); alt =screen->availableSize().height(); 

Для получения дополнительной информации, экран availableSize не готов в самом начале, поэтому вам нужно подождать, вот код:

 Widget::Widget(QWidget *parent){ ... QScreen *screen = QApplication::screens().at(0); connect(screen, SIGNAL(virtualGeometryChanged(QRect)), this,SLOT(getScreen(QRect))); } void Widget::getScreen(QRect rect) { int screenY = screen->availableSize().height(); int screenX = screen->availableSize().width(); this->setGeometry(0,0,screenX,screenY); } 
Intereting Posts
Волейбол, не вызывающий getParams () для стандартного запроса POST Не удалось запустить Android Studio на моей Mac OS Yosemite. Ошибка. Следующий компонент SDK не был установлен: sys-img-x86-addon-google_apis-google-21 Есть ли список разрешений экрана для всех Android-телефонов и планшетов на базе Android? Обходной путь для необходимости использования строки _id для CursorAdapter Android: Сколько памяти использует мое приложение? Работа над Canvas.clipPath (), которая больше не поддерживается в android Android двухсторонняя привязка с типом Integer приводит к тому, что привязка данных не существует Как получить свой контекст в своем плагине для телефонных разговоров Есть ли способ использовать SpannableString в TabLayout? Знак Dollar ($) после имени класса активности в журналах Android (неанонимный внутренний класс) Если я удалю APK с консоли разработчика Play, он все еще доступен для загрузки, пока я не удалю публикацию? API 14 и 15 отсутствуют в Android Studio 2.0 AVD manager Диалоговое окно Android снова отображается после перезапуска Activity GZip в android Как правильно установить точку останова во вложенном классе с помощью JDB?