Telegram Group & Telegram Channel
Расширенные клиентские области и безопасные зоны

Классикой современного дизайна приложений на настольных и мобильных платформах является то, что содержимое находится в центре внимания — элементы интерфейса приложения и системы органично вписываются в контент, не отвлекая пользователя. В Qt 6.9 появились две новые возможности, которые помогают достичь этого: расширенные клиентские области и безопасные зоны.

Расширенные клиентские области

Предположим, мы создаём приложение для любителей собак, в котором показываем наши любимые фотографии. Минимальный пример приложения может выглядеть так:


import QtQuick

Window {
visible: true
width: 800; height: 600
Image {
anchors.fill: parent
source: "https://placedog.net/800/600?r"
fillMode: Image.PreserveAspectCrop
}
}


Это даёт нам следующее на macOS и iOS: наша собака в центре внимания. Но есть несколько элементов интерфейса, которые конкурируют за наше внимание — заголовок окна и элементы управления на macOS; а также часы, Wi-Fi и индикатор батареи на iOS. Мы можем сделать лучше!

Добавив флаг окна Qt.ExpandedClientAreaHint, мы просим расширить клиентскую область окна в те зоны, которые обычно зарезервированы для системного интерфейса:


Window {
flags: Qt.ExpandedClientAreaHint | Qt.NoTitleBarBackgroundHint
// ...
}


Чтобы скрыть заголовок окна на macOS, мы также используем Qt.NoTitleBarBackgroundHint. В результате содержимое растягивается по всему экрану, полностью фокусируя внимание на нашей собаке.

Безопасные зоны

Однако с расширением клиентской области возникают и новые обязанности. Теперь наше приложение борется за тот же экранный простор, что и системный интерфейс, и система обычно побеждает. Это значит, что важно не размещать важный контент в областях, где он может быть перекрыт элементами системы.

Например, мы можем захотеть добавить кнопки для взаимодействия с собакой, пока нас нет:


Window {
// ...
Item {
anchors {
left: parent.left; right: parent.right; top: parent.top
margins: 10
}
Text {
text: "Throw Ball"; color: "white"; font.pointSize: 18
anchors.left: parent.left
}
Text {
text: "Give Bone"; color: "white"; font.pointSize: 18
anchors.right: parent.right
}
}
}


Но это будет конфликтовать с системным интерфейсом на macOS и iOS. Чтобы избежать этого, мы используем новое присоединённое свойство SafeArea, которое сообщает, насколько нужно отступить содержимое от «небезопасных» зон окна:


anchors {
left: parent.left; right: parent.right; top: parent.top
topMargin: 10 + parent.SafeArea.margins.top
leftMargin: 10 + parent.SafeArea.margins.left
rightMargin: 10 + parent.SafeArea.margins.right
}


Это надёжно размещает кнопки ниже заголовка окна на macOS и внизу экрана на iOS, учитывая все ориентации экрана.

Qt Quick Controls

До сих пор мы использовали обычное окно Window, но в реальности вы, скорее всего, будете применять ApplicationWindow из Qt Quick Controls, который уже включает поддержку безопасных зон. При установке флага Qt.ExpandedClientAreaHint фон окна автоматически растягивается на всю область, а содержимое остаётся внутри безопасных зон. Для таких элементов, как ToolBar и MenuBar, предусмотрена автоматическая подстройка фона и содержимого под безопасные зоны.

Взгляд в будущее

Мы надеемся, что эти изменения в Qt 6.9 помогут внедрять современные UI-подходы в ваших приложениях. Функции уже доступны и поддерживаются на macOS, Windows, iOS, visionOS и Android, а в будущем мы планируем расширить поддержку на другие платформы. По умолчанию на некоторых платформах, таких как Android и iOS, флаг Qt.ExpandedClientAreaHint может быть включён автоматически. Пожалуйста, протестируйте новые возможности и сообщите нам о любых проблемах или неудовлетворённых сценариях использования.

https://www.qt.io/blog/expanded-client-areas-and-safe-areas-in-qt-6.9

#cpp #programming

👉 @cpp_lib



tg-me.com/cpp_lib/1954
Create:
Last Update:

Расширенные клиентские области и безопасные зоны

Классикой современного дизайна приложений на настольных и мобильных платформах является то, что содержимое находится в центре внимания — элементы интерфейса приложения и системы органично вписываются в контент, не отвлекая пользователя. В Qt 6.9 появились две новые возможности, которые помогают достичь этого: расширенные клиентские области и безопасные зоны.

Расширенные клиентские области

Предположим, мы создаём приложение для любителей собак, в котором показываем наши любимые фотографии. Минимальный пример приложения может выглядеть так:


import QtQuick

Window {
visible: true
width: 800; height: 600
Image {
anchors.fill: parent
source: "https://placedog.net/800/600?r"
fillMode: Image.PreserveAspectCrop
}
}


Это даёт нам следующее на macOS и iOS: наша собака в центре внимания. Но есть несколько элементов интерфейса, которые конкурируют за наше внимание — заголовок окна и элементы управления на macOS; а также часы, Wi-Fi и индикатор батареи на iOS. Мы можем сделать лучше!

Добавив флаг окна Qt.ExpandedClientAreaHint, мы просим расширить клиентскую область окна в те зоны, которые обычно зарезервированы для системного интерфейса:


Window {
flags: Qt.ExpandedClientAreaHint | Qt.NoTitleBarBackgroundHint
// ...
}


Чтобы скрыть заголовок окна на macOS, мы также используем Qt.NoTitleBarBackgroundHint. В результате содержимое растягивается по всему экрану, полностью фокусируя внимание на нашей собаке.

Безопасные зоны

Однако с расширением клиентской области возникают и новые обязанности. Теперь наше приложение борется за тот же экранный простор, что и системный интерфейс, и система обычно побеждает. Это значит, что важно не размещать важный контент в областях, где он может быть перекрыт элементами системы.

Например, мы можем захотеть добавить кнопки для взаимодействия с собакой, пока нас нет:


Window {
// ...
Item {
anchors {
left: parent.left; right: parent.right; top: parent.top
margins: 10
}
Text {
text: "Throw Ball"; color: "white"; font.pointSize: 18
anchors.left: parent.left
}
Text {
text: "Give Bone"; color: "white"; font.pointSize: 18
anchors.right: parent.right
}
}
}


Но это будет конфликтовать с системным интерфейсом на macOS и iOS. Чтобы избежать этого, мы используем новое присоединённое свойство SafeArea, которое сообщает, насколько нужно отступить содержимое от «небезопасных» зон окна:


anchors {
left: parent.left; right: parent.right; top: parent.top
topMargin: 10 + parent.SafeArea.margins.top
leftMargin: 10 + parent.SafeArea.margins.left
rightMargin: 10 + parent.SafeArea.margins.right
}


Это надёжно размещает кнопки ниже заголовка окна на macOS и внизу экрана на iOS, учитывая все ориентации экрана.

Qt Quick Controls

До сих пор мы использовали обычное окно Window, но в реальности вы, скорее всего, будете применять ApplicationWindow из Qt Quick Controls, который уже включает поддержку безопасных зон. При установке флага Qt.ExpandedClientAreaHint фон окна автоматически растягивается на всю область, а содержимое остаётся внутри безопасных зон. Для таких элементов, как ToolBar и MenuBar, предусмотрена автоматическая подстройка фона и содержимого под безопасные зоны.

Взгляд в будущее

Мы надеемся, что эти изменения в Qt 6.9 помогут внедрять современные UI-подходы в ваших приложениях. Функции уже доступны и поддерживаются на macOS, Windows, iOS, visionOS и Android, а в будущем мы планируем расширить поддержку на другие платформы. По умолчанию на некоторых платформах, таких как Android и iOS, флаг Qt.ExpandedClientAreaHint может быть включён автоматически. Пожалуйста, протестируйте новые возможности и сообщите нам о любых проблемах или неудовлетворённых сценариях использования.

https://www.qt.io/blog/expanded-client-areas-and-safe-areas-in-qt-6.9

#cpp #programming

👉 @cpp_lib

BY Библиотека C/C++ разработчика




Share with your friend now:
tg-me.com/cpp_lib/1954

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

What is Secret Chats of Telegram

Secret Chats are one of the service’s additional security features; it allows messages to be sent with client-to-client encryption. This setup means that, unlike regular messages, these secret messages can only be accessed from the device’s that initiated and accepted the chat. Additionally, Telegram notes that secret chats leave no trace on the company’s services and offer a self-destruct timer.

Export WhatsApp stickers to Telegram on Android

From the Files app, scroll down to Internal storage, and tap on WhatsApp. Once you’re there, go to Media and then WhatsApp Stickers. Don’t be surprised if you find a large number of files in that folder—it holds your personal collection of stickers and every one you’ve ever received. Even the bad ones.Tap the three dots in the top right corner of your screen to Select all. If you want to trim the fat and grab only the best of the best, this is the perfect time to do so: choose the ones you want to export by long-pressing one file to activate selection mode, and then tapping on the rest. Once you’re done, hit the Share button (that “less than”-like symbol at the top of your screen). If you have a big collection—more than 500 stickers, for example—it’s possible that nothing will happen when you tap the Share button. Be patient—your phone’s just struggling with a heavy load.On the menu that pops from the bottom of the screen, choose Telegram, and then select the chat named Saved messages. This is a chat only you can see, and it will serve as your sticker bank. Unlike WhatsApp, Telegram doesn’t store your favorite stickers in a quick-access reservoir right beside the typing field, but you’ll be able to snatch them out of your Saved messages chat and forward them to any of your Telegram contacts. This also means you won’t have a quick way to save incoming stickers like you did on WhatsApp, so you’ll have to forward them from one chat to the other.

telegram from ca


Telegram Библиотека C/C++ разработчика
FROM USA