Améliorations en matière d'accessibilité
Le mode contraste élevé est devenu une fonctionnalité clé des principaux systèmes d'exploitation pour améliorer la clarté visuelle et la convivialité. Avec la sortie de Qt 6.10, nous alignons nos styles intégrés sur les paramètres de contraste spécifiques à chaque plateforme. Cela rend vos applications visuellement cohérentes avec le reste de l'expérience utilisateur et plus accessibles à un plus large éventail d'utilisateurs. De plus, vous pourrez plus facilement vous conformer aux différentes réglementations en matière d'accessibilité.
Mise en page Flexbox
Qt propose depuis longtemps une variété de types de mise en page qui organisent automatiquement les composants de l'interface utilisateur au sein d'une interface utilisateur. Les mises en page de Qt sont particulièrement bien adaptées à la création d'interfaces réactives et redimensionnables, ce qui est idéal pour créer des interfaces utilisateur qui doivent fonctionner sur diverses plateformes, avec différentes tailles d'écran et différents formats. Cela permet également de créer une interface utilisateur unique qui peut être traduite dans des langues avec des longueurs de texte variables, ou lorsque les utilisateurs préfèrent différentes tailles de police.
Avec Qt 6.10, un nouveau type FlexboxLayout vient s'ajouter aux types de mise en page existants dans Qt Quick. FlexboxLayout de Qt offre des fonctionnalités similaires à celles de Flexible Box Layout de CSS, tout en s'intégrant étroitement aux concepts familiers du mécanisme de mise en page de Qt Quick, tels que les propriétés attachées pour configurer le comportement des éléments individuels dans la mise en page.
QRangeModel
L'une des nouvelles classes de Qt 6.10 est QRangeModel, une implémentation QAbstractItemModel légère et polyvalente conçue pour exposer les plages C++, telles que std::vector, std::array ou tout conteneur itérable, directement aux vues d'éléments dans Widgets, ainsi qu'aux vues QML et Qt Quick. Que les données soient constituées de valeurs simples comme des entiers ou de types plus complexes comme Q_GADGETs ou std::tuples, QRangeModel génère automatiquement les rôles appropriés et rend les données accessibles dans les délégués sans nécessiter de code modèle standard. Par exemple, un std::vector<int> peut être encapsulé dans un QRangeModel et utilisé dans une interface utilisateur Qt Widgets comme ceci :
1 2 3 4 5
|
std::vector<int> values = {1, 2, 3, 4, 5};
auto model = new QRangeModel(values);
QListView *listView = new QListView;
listView->setModel(model); |
Lorsqu'il est utilisé avec des gadgets, QRangeModel expose automatiquement chaque propriété en tant que rôle nommé, ce qui permet aux délégués QML de s'y lier à l'aide des propriétés requises. Prenons par exemple un gadget représentant une valeur étiquetée :
1 2 3 4 5 6 7 8 9
| struct LabeledValue {
Q_GADGET
Q_PROPERTY(int value MEMBER value)
Q_PROPERTY(QString label MEMBER label)
public:
int value;
QString label;
}; |
Vous pouvez créer un modèle à partir d'un std::vector comme ceci :
1 2 3 4
| std::vector<LabeledValue> data = {
{1, "One"}, {2, "Two"}, {3, "Three"}
};
auto labeledValues = new QRangeModel(data); |
Et dans QML, vous pouvez utiliser les propriétés requises dans le délégué pour vous lier aux rôles du modèle de manière sécurisée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ListView {
model: modelProvider.labeledValues
delegate: Item {
required property int value
required property string label
width: ListView.view.width
height: 40
Text {
anchors.centerIn: parent
text: label + " (" + value + ")"
}
}
} |
Ce modèle élimine le besoin de gérer manuellement les rôles ou les propriétés de contexte, et fonctionne de manière transparente avec QML compilé. Cela facilite la connexion entre le C++ moderne et QML, sans aucune implémentation standard de QAbstractItemModel.
Liaisons bidirectionnelles avec Synchronizer
Les liaisons bidirectionnelles ou multi-synchronisation ont souvent été demandées. Dans Qt 6.10, l'élément Synchronizer a été introduit. Avec un Synchronizer, vous pouvez vous assurer que plusieurs propriétés conservent la même valeur dans la mesure du possible, sans pour autant rompre les liaisons dans l'une ou l'autre. Avant Synchronizer, vous deviez généralement disposer d'une liaison et d'un gestionnaire de signaux pour synchroniser un contrôle avec une valeur de modèle, et cela ne fonctionnait que pour les contrôles implémentés en C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| delegate: Row {
id: delegate
required property int value
required property string label
SpinBox {
value: delegate.value
// Extra signal, only for input
onValueModified: delegate.value = value
}
Text { text: delegate.label }
} |
Avec Synchronizer, vous n'avez besoin que d'un seul élément pour effectuer la synchronisation, cela fonctionne pour n'importe quel nombre de propriétés à synchroniser, et les cibles peuvent être implémentées en C++ ou QML.
1 2 3 4 5 6 7 8 9 10 11 12 13
| delegate: Row {
id: delegate
required property int value
required property string label
SpinBox {
Synchronizer on value {
property alias source: delegate.value
}
}
Text { text: delegate.label }
} |
Améliorations pour les développeurs Android
Qt 6.10 comprend un certain nombre d'améliorations qui rendent la plate-forme Android plus conviviale pour les développeurs, ajoute la prise en charge des dernières versions d'Android et facilite la création d'une bonne première impression pour votre application.
Prise en charge d'Android 15 et 16
Avec Qt 6.10, nous prenons officiellement en charge Android 15 et 16. Cela inclut des mises à jour du système de compilation et la prise en charge des pages 16K, ce qui vous permet de cibler les appareils Android les plus récents. Cette prise en charge garantit que les applications Qt restent stables et performantes dans l'écosystème Android en constante évolution.
Qt Jenny 1.0
Qt Jenny 1.0 est un nouvel outil qui simplifie l'intégration des API Java Android dans les applications Qt. Il agit comme un générateur de code pour le code JNI glue, permettant aux développeurs de générer automatiquement des API Qt C++ à partir de classes Java annotées. Qt Jenny se compose d'un compilateur et d'un processeur d'annotation, permettant d'accéder à des services natifs Android tels que BatteryManager, PowerManager et AudioManager à partir du code Qt. Le code généré utilise QJniObject et prend également en charge les notifications, qui sont assez complexes à mettre en œuvre via JNI. Qt Jenny est disponible via Maven Central, et des exemples sont inclus dans Qt Creator et la documentation en ligne pour aider les développeurs à démarrer rapidement.
Amélioration de la gestion de l'écran de démarrage
Depuis qu'Android 12 a introduit une API d'écran de démarrage par défaut, les applications Qt devaient veiller à ne pas afficher deux écrans de démarrage : celui d'Android, puis celui de Qt. Avec Qt 6.10, nous fournissons des exemples et des conseils pour créer une transition fluide entre l'écran de démarrage Android et celui de Qt. Cela implique d'utiliser une SplashActivity dédiée, de personnaliser les thèmes pour la translucidité et de ne lancer l'activité Qt qu'une fois Android prêt. Il en résulte une expérience de démarrage plus soignée et plus cohérente, en particulier pour les applications multiplateformes.
macOS et iOS 26
Qt 6.10 est la première version mineure de Qt depuis que macOS 26 « Tahoe » est sorti de sa phase bêta il y a quelques semaines. Au cours des derniers mois, depuis l'annonce en juin, nous avons travaillé pour nous assurer que les applications Qt s'affichent correctement sur les dernières versions de macOS et iOS.
Le nouveau système de conception Liquid Glass et les modifications apportées à l'architecture de rendu sous-jacente sur macOS nous ont posé quelques défis, et nous sommes heureux d'ajouter macOS 26 à la liste des plateformes entièrement prises en charge par Qt. De nombreuses améliorations seront également intégrées dans les prochaines versions correctives des branches LTS, et macOS 26 sera également pris en charge par les versions Qt 6.8 et Qt 6.5.
Partager