<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Qt</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt]]></description>
		<language>fr</language>
		<lastBuildDate>Thu, 25 Jun 2026 04:40:36 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Qt</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title><![CDATA[Le framework de développement d'applications multiplateformes Qt 6.11 est disponible]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182844&amp;goto=newpost</link>
			<pubDate>Tue, 24 Mar 2026 16:30:27 GMT</pubDate>
			<description>*Le framework de...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Le framework de développement d'applications multiplateformes Qt 6.11 introduit Qt Canvas Painter, d'importantes améliorations en 3D et de nouvelles fonctionnalités graphiques</font></b> <br />
<br />
<b>Qt 6.11 est désormais disponible en tant que dernière version du framework d'applications multiplateformes dédié aux interfaces utilisateur graphiques et au développement d'applications. Cette mise à jour introduit Qt Canvas Painter, un nouveau module graphique 2D basé sur l'interface matérielle de rendu (Rendering Hardware Interface) pour un dessin accéléré par le matériel. Outre Canvas Painter, cette version apporte des améliorations significatives en matière de visualisation 3D. S'appuyant sur ces mises à jour, Qt 6.11 introduit de nouvelles méthodes pour créer des graphes et interagir avec eux, ainsi que Qt TaskTree, un module en préversion technologique qui propose une approche déclarative des flux de travail asynchrones en C++.</b><br />
<br />
Qt est un framework de développement d'applications multiplateforme permettant de créer des interfaces utilisateur graphiques ainsi que des applications multiplateformes fonctionnant sur diverses plateformes logicielles et matérielles telles que Linux, Windows, macOS, Android ou des systèmes embarqués, avec peu ou pas de modification du code source sous-jacent, tout en conservant le statut d'application native avec des capacités et une vitesse natives.<br />
<br />
Qt 6.11 est désormais disponible en tant que dernière version du framework d'applications multiplateformes dédié aux interfaces utilisateur graphiques et au développement d'applications. Cette mise à jour introduit Qt Canvas Painter, un nouveau module graphique 2D basé sur l'interface matérielle de rendu (Rendering Hardware Interface) pour un dessin accéléré par le matériel. Canvas Painter inclut des fonctionnalités avancées telles que l'anticrénelage réglable, les dégradés de boîte, les ombres, les motifs de grille, les pinceaux de shader personnalisés et les effets de couleur, qui permettent des workflows d'interface utilisateur visuellement riches et efficaces.<br />
<br />
Outre Canvas Painter, cette version apporte des améliorations significatives en matière de visualisation 3D. Screen Space Global Illumination (SSGI) simule les rebonds de lumière en temps réel pour un éclairage plus réaliste, tandis que Screen Space Reflections (SSR) rend les reflets à l'écran à l'aide d'un raymarching basé sur les pixels. Les vecteurs de mouvement par objet permettent d'équilibrer le coût de calcul et la fidélité du rendu. Les utilisateurs de Qt Quick 3D bénéficient également de nouvelles options de personnalisation pour les passes de rendu. Grâce à ces trois améliorations, l'équipe Qt affirme que le framework Qt offre désormais « les mêmes capacités 3D qu'un moteur de jeu ».<br />
<br />
S'appuyant sur ces mises à jour, Qt 6.11 introduit de nouvelles méthodes pour créer des graphes et interagir avec eux, ainsi que Qt TaskTree, un module en préversion technologique qui propose une approche déclarative des flux de travail asynchrones en C++. En définissant les flux de travail comme des recettes réutilisables, les développeurs peuvent automatiser la gestion des tâches de manière plus intuitive.<br />
<br />
Cette version comprend également des améliorations du framework d'interface utilisateur, des capacités 2D supplémentaires, des mises à jour concernant le Web et la connectivité, ainsi qu'une intégration simplifiée de QML et C++.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/RX-dcQWcU2w?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
Voici un extrait de l'annonce de Qt 6.11 :<br />
<br />
<b><font size="3">Présentation de Qt 6.11</font></b><br />
<br />
La version 6.11 du framework Qt est désormais disponible. Elle offre des performances améliorées, de nouvelles fonctionnalités et techniques en matière de graphisme, de connectivité et de langages, sans oublier une toute nouvelle approche du codage C++ asynchrone. Découvrez-la plus en détail.<br />
<br />
<b>Performances et productivité pour le rendu 2D : Qt Canvas Painter</b><br />
<br />
Cette version introduit une nouvelle méthode moderne de dessin graphique 2D avec Qt : Qt Canvas Painter. Il s'agit d'un nouveau module doté de capacités de rendu graphique 2D impératif, s'appuyant sur l'interface matérielle de rendu (RHI) de Qt. L'accélération matérielle offre des gains de performances notables pour les graphiques de votre interface utilisateur, les benchmarks montrant des accélérations significatives par rapport au module précédent, le backend OpenGL de QPainter.<br />
<br />
Qt Canvas Painter suit de près le contexte 2D familier de HTML Canvas, ce qui rend son utilisation rapide et facile et offre une productivité immédiate.<br />
<br />
Outre les gains de performances et de productivité, ce nouveau module apporte de superbes fonctionnalités avancées. Celles-ci incluent l'anticrénelage réglable, les dégradés et ombres de boîte, les motifs de grille, les pinceaux de shader personnalisés et les effets de couleur, permettant ainsi de créer des interfaces utilisateur modernes et visuellement riches, ainsi que des workflows de dessin efficaces pilotés par le GPU.<br />
<br />
Découvrez de quoi il s'agit dans cette vidéo de présentation d'une minute :<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/L2RT3HaYN98?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
<b>Améliorations apportées à l'un des meilleurs frameworks 3D</b><br />
<br />
Qt a évolué pour offrir les mêmes capacités 3D qu'un moteur de jeu, tout en garantissant des performances élevées et constantes. Cela signifie que les interfaces utilisateur avec Qt Quick 3D fonctionnent de manière fluide, même avec des éléments, des effets ou des animations complexes.<br />
<br />
<b>Nouvelles techniques de rendu en temps réel : SSGI, SSR et vecteurs de mouvement</b><br />
<br />
Alors que Qt 6.10 avait introduit des améliorations au niveau du baking des lightmaps, une technique utilisée pour modéliser l'interaction de la lumière avec les objets statiques, la version 6.11 propose désormais une alternative dynamique à cette technique. Le SSGI (Screen Space Global Illumination) est une technique de rendu permettant de simuler la façon dont la lumière rebondit sur les surfaces à l'écran sous forme d'effet de post-traitement, en réagissant aux changements en temps réel. Le SSGI a toutefois un certain coût en termes de performances, ce qui suggère d'opter pour le baking des lightmaps pour les cibles aux ressources limitées et plutôt pour le SSGI pour les interfaces utilisateur 3D riches, en particulier sur les applications moins sensibles aux performances.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p675207d1774384636/c-cpp/bibliotheques/qt/framework-developpement-dapplications-multiplateformes-qt-6-11-disponible/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 6807
Taille : 60,0 Ko"  style="float: CONFIG" /></div><br />
Une autre technique de rendu en temps réel, nouvelle dans la version 6.11, est le Screen Space Reflections (SSR). Semblable au SSGI, elle utilise ce qui est visible à l'écran, mais pour le rendu des reflets, en effectuant un « raymarching » à travers chaque pixel et en les reflétant en conséquence.<br />
<br />
De plus, grâce aux types SceneEnvironment et ExtendedSceneEnvironment, Qt Quick 3D prend en charge diverses techniques de rendu anti-crénelage des objets 3D. L'anti-crénelage temporel et le flou de mouvement sont particulièrement intéressants pour réduire l'aspect irrégulier des objets en mouvement. Avec Qt 6.11, nous ajoutons la génération de vecteurs de mouvement par objet, ce qui offre un excellent équilibre entre le coût de calcul et la fidélité du rendu.<br />
<br />
<b>Personnalisation avancée des passes de rendu</b><br />
<br />
Pour les utilisateurs qui doivent aller au-delà du pipeline de rendu par défaut parce qu'ils ont besoin d'effets visuels avancés, de performances optimisées ou de l'intégration de techniques personnalisées, Qt Quick 3D offre désormais des options pour personnaliser les passes de rendu. De nouvelles API pour les calques et les balises permettent de spécifier quels éléments doivent être inclus dans différentes parties du pipeline de rendu, de les diriger vers différentes cibles de rendu et de contrôler les passes de rendu individuelles. Utilisez les matériaux existants, enrichissez-les avec des shaders supplémentaires ou remplacez certains aspects des matériaux. Toute cette nouvelle flexibilité est directement accessible depuis QML.<br />
<br />
<b>De nouvelles façons de créer et d'interagir avec des graphiques</b><br />
<br />
En ce qui concerne les graphiques, voici un nouvel exemple Qt, le tableau de bord des éoliennes, qui montre à quel point vous pouvez créer et combiner de manière flexible des visualisations de données, allant de simples présentations 2D à des graphiques 3D complexes. Les graphiques sont également hautement personnalisables, que ce soit au niveau de leur apparence, de leurs étiquettes ou des interactions avec l'utilisateur.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p675208d1774384642/c-cpp/bibliotheques/qt/framework-developpement-dapplications-multiplateformes-qt-6-11-disponible/2.jpg/" border="0" alt="Nom : 2.jpg
Affichages : 489
Taille : 62,3 Ko"  style="float: CONFIG" /></div><br />
Dans cet nouvel exemple, vous pouvez constater que les graphiques 3D prennent désormais en charge plusieurs axes. Utilisez différentes instances d'axe pour les propriétés rowAxis, valueAxis et columnAxis dans QBar3DSeries, ou pour les propriétés axisX, axisY et axisZ dans QScatter3DSeries et QSurface3DSeries. Nous avons ajouté plusieurs nouvelles propriétés aux différents éléments du module Graphs afin d'offrir un meilleur contrôle sur le rendu des graphiques, qu'il s'agisse de remplacer les couleurs de thème pour les axes individuels et les dégradés dans les graphiques en aires, ou de modifier les styles de ligne, de trait et de jonction dans les graphiques linéaires. Les étiquettes dans Bar3DSeries peuvent être personnalisées et positionnées de manière plus flexible, QDateTimeAxis peut prendre en charge un fuseau horaire et permet le panoramique et le zoom, et des propriétés telles que QSplineSeries::optimized et GraphsItem3D.cutoffMargin permettent un réglage plus fin.<br />
<br />
Et si cela ne suffit pas, le nouveau type CustomSeries permet la mise en œuvre de graphiques entièrement personnalisés où un délégué défini par l'utilisateur rend chaque point de données.<br />
<br />
<b>Une approche déclarative du codage asynchrone : Qt TaskTree</b><br />
<br />
Qt TaskTree est un nouveau module, disponible dans Qt 6.11 en avant-première technologique.<br />
<br />
Qt TaskTree apporte une perspective entièrement nouvelle à la conception des API dans Qt, en introduisant une approche de description déclarative en C++. Un flux de travail asynchrone est exprimé sous forme de description déclarative via une recette, un objet réutilisable transmis à un arbre de tâches, qui gère alors automatiquement le flux de travail en conséquence. Cela sépare clairement le flux de travail du code standard, rendant le code beaucoup plus lisible que les approches traditionnelles. L'arbre de tâches se charge des tâches fastidieuses à votre place, et vous disposez d'un flux de travail, même complexe, décrit de manière claire et précise en un seul endroit.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p675209d1774384649/c-cpp/bibliotheques/qt/framework-developpement-dapplications-multiplateformes-qt-6-11-disponible/3.jpg/" border="0" alt="Nom : 3.jpg
Affichages : 490
Taille : 51,8 Ko"  style="float: CONFIG" /></div><br />
De plus, Qt TaskTree résout le problème des incompatibilités entre les API en regroupant diverses API asynchrones au sein d'une interface commune, ce qui permet d'adapter n'importe quelle tâche asynchrone pour qu'elle fonctionne avec le module.<br />
<br />
<b>Autres améliorations notables</b><br />
<br />
Parmi les autres améliorations majeures de la version Qt 6.11, citons des ajouts au framework d'interface utilisateur, une connexion plus facile aux services web et d'autres améliorations de connectivité, ainsi qu'une intégration plus aisée de QML et C++.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://www.qt.io/blog/qt-6.11-released" target="_blank">Annonce de Qt 6.11</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://qt.developpez.com/actu/376545/Qt-6-10-la-derniere-version-du-framework-de-developpement-d-applications-multiplateforme-est-disponible-avec-le-backend-audio-PipeWire-et-de-nombreuses-autres-ameliorations/" target="_blank">Qt 6.10, la dernière version du framework de développement d'applications multiplateforme, est disponible avec le backend audio PipeWire et de nombreuses autres améliorations</a><br />
<br />
:fleche: <a href="https://qt.developpez.com/actu/381152/Qt-Creator-19-l-EDI-multiplateforme-pour-Cplusplus-JavaScript-Python-et-QML-est-disponible-proposant-une-mini-carte-une-configuration-simplifiee-des-appareils-distants-et-un-serveur-MCP/" target="_blank">Qt Creator 19, l'EDI multiplateforme pour C++, JavaScript, Python et QML, est disponible, proposant une mini-carte, une configuration simplifiée des appareils distants et un serveur MCP</a><br />
<br />
:fleche: <a href="https://edi.developpez.com/actu/376856/La-version-4-8-de-Qt-Design-Studio-l-environnement-de-developpement-d-interfaces-graphiques-est-disponible-avec-un-nouveau-modele-de-code-QML-et-avec-Project-Storage-une-mise-a-niveau-du-backend/" target="_blank">La version 4.8 de Qt Design Studio, l'environnement de développement d'interfaces graphiques, est disponible avec un nouveau modèle de code QML et avec Project Storage, une mise à niveau du backend</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p675207d1774384636/c-cpp/bibliotheques/qt/framework-developpement-dapplications-multiplateformes-qt-6-11-disponible/1.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p675208d1774384642/c-cpp/bibliotheques/qt/framework-developpement-dapplications-multiplateformes-qt-6-11-disponible/2.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p675209d1774384649/c-cpp/bibliotheques/qt/framework-developpement-dapplications-multiplateformes-qt-6-11-disponible/3.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f376/c-cpp/bibliotheques/qt/">Qt</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182844/c-cpp/bibliotheques/qt/framework-developpement-d-applications-multiplateformes-qt-6-11-disponible/</guid>
		</item>
		<item>
			<title>Qt Installer Framework : comment créer une page avec un mot de passe vérifié ?</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180194&amp;goto=newpost</link>
			<pubDate>Thu, 30 Oct 2025 13:12:29 GMT</pubDate>
			<description>Bonjour à tous,  
Je me lance...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous, <br />
Je me lance pour créer un installeur de mon application. Il me faut une fenêtre avec un mot de passe à déterminer et une vérification de ce de mot de passe. <br />
J'ai trouvé la façon de faire sur internet mais, si je vois ma fenêtre à l'écran, la vérification de ne se fait pas ... J'ai pourtant l'impression de bien écrire le code ... Je ne passe pas dans la fonction DynamicPasswordPageValidatePage() ...<br />
<br />
De plus, le fichier associé ne se crée pas non plus ... Des idées ? Merci d'avance ... <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
package.xml : 
&nbsp;
&lt;Package&gt;
    &lt;DisplayName&gt;SMSP_NG&lt;/DisplayName&gt;
    &lt;Description&gt;Install of SMSP-NG <span style="color: #0000ff;">for</span> SMS4 maintenance&lt;/Description&gt;
    &lt;Version&gt;<span style="color: #cc66cc;">1.0</span>.<span style="color: #cc66cc;">0</span>&lt;/Version&gt;
    &lt;ReleaseDate&gt;<span style="color: #cc66cc;">2025</span>-<span style="color: #cc66cc;">10</span>-<span style="color: #cc66cc;">23</span>&lt;/ReleaseDate&gt;
    &lt;Script&gt;installscriptSMSP_NG.qs&lt;/Script&gt;
&nbsp;
	&lt;!-- Tout est coch&eacute; par d&eacute;faut --&gt;
	&lt;Default&gt;<span style="color: #0080ff;">true</span>&lt;/Default&gt;
&nbsp;
	&lt;!-- ajout de la fen&ecirc;tre du mot de passe --&gt;
	&lt;UserInterfaces&gt;
		&lt;UserInterface&gt;PasswordPage.ui&lt;/UserInterface&gt;
	&lt;/UserInterfaces&gt;
&nbsp;
&lt;/Package&gt;</pre></td></tr></table></code><hr />
</div>et installscriptSMSP_NG.qs:<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #808080;">// ===============================</span>
<span style="color: #808080;">// &#128995; Creation de l'installeur et Initialisation de la page mot de passe</span>
<span style="color: #808080;">// ===============================</span>
function Component<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
&nbsp;
        <span style="color: #808080;">// Ajouter la page personnalis&eacute;e avant la page &quot;ReadyForInstallation&quot;</span>
	component.loaded.connect<span style="color: black;">&#40;</span><span style="color: #0000ff;">this</span>, Component.prototype.installerLoaded<span style="color: black;">&#41;</span>;
&nbsp;
	<span style="color: #808080;">// Cacher la page de s&eacute;lection des composants: pour que tout s'installe il faut que dans le package.xml, on ait &lt;default&gt;true&lt;default&gt;</span>
	installer.setDefaultPageVisible<span style="color: black;">&#40;</span><span style="color: #a020a0;font-weight: 700;">QInstaller</span>.ComponentSelection, <span style="color: #0080ff;">false</span><span style="color: black;">&#41;</span>;
	installer.setDefaultPageVisible<span style="color: black;">&#40;</span><span style="color: #a020a0;font-weight: 700;">QInstaller</span>.LicenseCheck, <span style="color: #0080ff;">false</span><span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span>
&nbsp;
Component.prototype.installerLoaded = function <span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>installer.addWizardPage<span style="color: black;">&#40;</span>component, <span style="color: #FF0000;">&quot;DynamicPasswordPage&quot;</span>, <span style="color: #a020a0;font-weight: 700;">QInstaller</span>.ReadyForInstallation<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
        var welcomePage = gui.pageWidgetByObjectName<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;DynamicPasswordPage&quot;</span><span style="color: black;">&#41;</span>;
        welcomePage.title = <span style="color: #FF0000;">&quot;Welcome to the SMSP-NG installer&quot;</span>;
        welcomePage.MessageLabel.text = <span style="color: #FF0000;">&quot;SMSP-NG installation for SMS4 maintenance.&quot;</span>;
&nbsp;
        var imageLabel = <span style="color: #0000ff;">new</span> <span style="color: #a020a0;font-weight: 700;">QLabel</span><span style="color: black;">&#40;</span>welcomePage.widget<span style="color: black;">&#41;</span>;
        var pixmap = <span style="color: #0000ff;">new</span> <span style="color: #a020a0;font-weight: 700;">QPixmap</span><span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;avion.png&quot;</span><span style="color: black;">&#41;</span>;
        imageLabel.setPixmap<span style="color: black;">&#40;</span>pixmap<span style="color: black;">&#41;</span>;
        imageLabel.setAlignment<span style="color: black;">&#40;</span><span style="color: #a020a0;font-weight: 700;">Qt</span>.AlignCenter<span style="color: black;">&#41;</span>;
        imageLabel.setScaledContents<span style="color: black;">&#40;</span><span style="color: #0080ff;">true</span><span style="color: black;">&#41;</span>;
        imageLabel.resize<span style="color: black;">&#40;</span><span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">200</span><span style="color: black;">&#41;</span>;
&nbsp;
        var layout = welcomePage.widget.layout<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
        <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>layout<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
            layout.addWidget<span style="color: black;">&#40;</span>imageLabel<span style="color: black;">&#41;</span>;
        <span style="color: black;">&#125;</span>
		<span style="color: #0000ff;">else</span> <span style="color: black;">&#123;</span>
			console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;Page Welcome introuvable&quot;</span><span style="color: black;">&#41;</span>;
		<span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #808080;">// ===============================</span>
<span style="color: #808080;">// &#128995; Validation du formulaire</span>
<span style="color: #808080;">// ===============================</span>
Component.prototype.DynamicPasswordPageValidatePage  = function<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
&nbsp;
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;DynamicPasswordPageValidatePage: OK&quot;</span><span style="color: black;">&#41;</span>;	
&nbsp;
    var page = gui.pageWidgetByObjectName<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;DynamicPasswordPage&quot;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!page<span style="color: black;">&#41;</span>
	<span style="color: black;">&#123;</span>
		console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;page not found&quot;</span><span style="color: black;">&#41;</span>;	
        <span style="color: #0000ff;">return</span> <span style="color: #0080ff;">true</span>;
	<span style="color: black;">&#125;</span>
&nbsp;
	page.title = <span style="color: #FF0000;">&quot;Security for SMSP-NG&quot;</span>;
    page.subtitle = <span style="color: #FF0000;">&quot;Create an administrator password for the application&quot;</span>;
	<span style="color: #808080;">//page.windowTitle = &quot;Security for SMSP-NG \nCreate an administrator password for the application&quot;;</span>
	<span style="color: #808080;">//page.description.setText(&quot;Create an administrator password for the application&quot;);	</span>
&nbsp;
    var pw = page.findChild<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;QLineEdit&quot;</span>, <span style="color: #FF0000;">&quot;passwordField&quot;</span><span style="color: black;">&#41;</span>;
    var pwc = page.findChild<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;QLineEdit&quot;</span>, <span style="color: #FF0000;">&quot;confirmField&quot;</span><span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>!pw.text || pw.text.length &lt; <span style="color: #cc66cc;">6</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
        gui.messageBox<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;warning&quot;</span>, <span style="color: #FF0000;">&quot;Error&quot;</span>, <span style="color: #FF0000;">&quot;The password must contain at least 6 characters!&quot;</span><span style="color: black;">&#41;</span>;
        <span style="color: #0000ff;">return</span> <span style="color: #0080ff;">false</span>;
    <span style="color: black;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>pw.text !== pwc.text<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
        gui.messageBox<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;warning&quot;</span>, <span style="color: #FF0000;">&quot;Error&quot;</span>, <span style="color: #FF0000;">&quot;The passwords are different!&quot;</span><span style="color: black;">&#41;</span>;
        <span style="color: #0000ff;">return</span> <span style="color: #0080ff;">false</span>;
    <span style="color: black;">&#125;</span>
&nbsp;
    installer.setValue<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;adminPassword&quot;</span>, pw.text<span style="color: black;">&#41;</span>;
&nbsp;
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;Mot de passe saisi (validatePage) :&quot;</span>, pw.text<span style="color: black;">&#41;</span>;	
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0080ff;">true</span>;
<span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #808080;">// ===============================</span>
<span style="color: #808080;">// &#128995; Cr&eacute;ation </span>
<span style="color: #808080;">// ===============================</span>
Component.prototype.createOperations = function<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    component.createOperations<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
	<span style="color: #808080;">// &#128995; &Eacute;criture du hash + cr&eacute;ation des raccourcis</span>
    var targetDir = installer.value<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;TargetDir&quot;</span><span style="color: black;">&#41;</span>;
	<span style="color: #808080;">//var exePath = &quot;@TargetDir@/SMSP_NG.exe&quot;;</span>
	var exePath = targetDir + <span style="color: #FF0000;">&quot;/SMSP_NG.exe&quot;</span>;
&nbsp;
	<span style="color: #808080;">// &#128272; &Eacute;criture du mot de passe</span>
    var password = installer.value<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;adminPassword&quot;</span><span style="color: black;">&#41;</span>;
	<span style="color: #808080;">//installer.setValue(&quot;adminPassword&quot;, password);</span>
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;Mot de passe saisi :&quot;</span>, installer.value<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;adminPassword&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
&nbsp;
	var filePath = targetDir + <span style="color: #FF0000;">&quot;/SMSP.INI&quot;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>password &amp;&amp; password.length &gt; <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
        var hash = sha1<span style="color: black;">&#40;</span>password<span style="color: black;">&#41;</span>;
&nbsp;
		component.addOperation<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;CreateFile&quot;</span>, filePath, <span style="color: #FF0000;">&quot;&quot;</span><span style="color: black;">&#41;</span>;
        component.addOperation<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;AppendFile&quot;</span>, filePath, hash + <span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span><span style="color: black;">&#41;</span>;
    <span style="color: black;">&#125;</span>
	<span style="color: #0000ff;">else</span> <span style="color: black;">&#123;</span>
        console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;No password to write&quot;</span><span style="color: black;">&#41;</span>;
	<span style="color: black;">&#125;</span>
&nbsp;
	<span style="color: #808080;">// &#128421;&#65039; Raccourci Bureau</span>
    component.addOperation<span style="color: black;">&#40;</span>
		<span style="color: #FF0000;">&quot;CreateShortcut&quot;</span>, 
		exePath, 
		<span style="color: #FF0000;">&quot;@DesktopDir@/SMSP_NG.lnk&quot;</span>,
		<span style="color: #FF0000;">&quot;workingDirectory=@TargetDir@&quot;</span>, 
		<span style="color: #FF0000;">&quot;iconPath=&quot;</span> + exePath
	<span style="color: black;">&#41;</span>;
&nbsp;
	<span style="color: #808080;">// &#129695; Raccourci Menu D&eacute;marrer</span>
    component.addOperation<span style="color: black;">&#40;</span>
		<span style="color: #FF0000;">&quot;CreateShortcut&quot;</span>, 
		exePath, 
		<span style="color: #FF0000;">&quot;@StartMenuDir@/SMSP_NG.lnk&quot;</span>,
		<span style="color: #FF0000;">&quot;workingDirectory=@TargetDir@&quot;</span>, 
		<span style="color: #FF0000;">&quot;iconPath=&quot;</span> + exePath
	<span style="color: black;">&#41;</span>;
&nbsp;
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;TargetDir:&quot;</span>, installer.value<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;TargetDir&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;Password:&quot;</span>, installer.value<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;adminPassword&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>;
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;File path:&quot;</span>, targetDir + <span style="color: #FF0000;">&quot;/SMSP.INI&quot;</span><span style="color: black;">&#41;</span>;	
	console.log<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;Password hash:&quot;</span>, hash<span style="color: black;">&#41;</span>;	
&nbsp;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #808080;">// ===============================</span>
<span style="color: #808080;">// &#128272; SHA-1 identique &agrave; Qt</span>
<span style="color: #808080;">// ===============================</span>
function sha1<span style="color: black;">&#40;</span>msg<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    ...
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f376/c-cpp/bibliotheques/qt/">Qt</category>
			<dc:creator>Joccy</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180194/c-cpp/bibliotheques/qt/qt-installer-framework-creer-page-passe-verifie/</guid>
		</item>
		<item>
			<title>Qt 6.10 est disponible avec le backend audio PipeWire et de nombreuses autres améliorations</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179740&amp;goto=newpost</link>
			<pubDate>Wed, 08 Oct 2025 18:00:36 GMT</pubDate>
			<description>*Qt 6.10, la dernière version...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Qt 6.10, la dernière version du framework de développement d'applications multiplateforme, est disponible avec le backend audio PipeWire et de nombreuses autres améliorations</font></b><br />
<br />
<b>Qt 6.10 est désormais disponible en tant que dernière mise à jour fonctionnelle de cette boîte à outils open source et multiplateforme. Dans Qt 6.10, un backend audio PipeWire natif est ajouté au module Qt Multimedia et le module Qt WebEngine prend désormais en charge les extensions Chromium. Qt Graphs a bénéficié d'un certain nombre d'améliorations pour ses capacités graphiques 2D, telles que la prise en charge du survol et la prise en charge multi-axes.</b><br />
<br />
Qt est un framework de développement d'applications multiplateforme permettant de créer des interfaces utilisateur graphiques ainsi que des applications multiplateformes qui fonctionnent sur diverses plateformes logicielles et matérielles telles que Linux, Windows, macOS, Android ou des systèmes embarqués, avec peu ou pas de modifications du code source sous-jacent, tout en restant une application native avec des capacités et une vitesse natives.<br />
<br />
Qt 6.10 est désormais disponible en tant que dernière mise à jour fonctionnelle de cette boîte à outils open source et multiplateforme. Dans Qt 6.10, un backend audio PipeWire natif est ajouté au module Qt Multimedia et le module Qt WebEngine prend désormais en charge les extensions Chromium. Qt Graphs a bénéficié d'un certain nombre d'améliorations pour ses capacités graphiques 2D, telles que la prise en charge du survol et la prise en charge multi-axes. QRhi de Qt GUI prend désormais en charge l'énumération des adaptateurs graphiques 3D lors de l'exécution sur Direct3D 11/12 ou Vulkan.<br />
<br />
Cette version apporte également des améliorations des performances pour QGrpcHttp2Channel et diverses améliorations en matière d'accessibilité. Qt 6.10 ajoute l'outil lottietoqml pour convertir les fichiers Lottie en scènes Qt Quick dans QML. Il existe également un plug-in VectorImage qui permet de charger directement des fichiers Lottie en plus des fichiers SVG. Pour cette version, on peut également citer : prise en charge des pages de 16 Ko sur Android, gestion des sessions Wayland, notifications de réinitialisation graphique pouvant être utilisées par des applications telles que KDE KWin et prise en charge de Yocto 5.2 avec Boot to Qt.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/L2HQkTA4pmY?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
Voici un extrait de l'annonce de Qt 6.10 :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			<br />
<b>Améliorations en matière d'accessibilité</b><br />
<br />
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é.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670827d1759979360/c-cpp/bibliotheques/qt/qt-6-10-disponible-backend-audio-pipewire-nombreuses-autres-ameliorations/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 8596
Taille : 56,3 Ko"  style="float: CONFIG" /></div><br />
<b>Mise en page Flexbox</b><br />
<br />
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.<br />
<br />
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.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670828d1759979366/c-cpp/bibliotheques/qt/qt-6-10-disponible-backend-audio-pipewire-nombreuses-autres-ameliorations/2.jpg/" border="0" alt="Nom : 2.jpg
Affichages : 1123
Taille : 18,4 Ko"  style="float: CONFIG" /></div><br />
<b>QRangeModel</b><br />
<br />
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&lt;int&gt; peut être encapsulé dans un QRangeModel et utilisé dans une interface utilisateur Qt Widgets comme ceci :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
std::vector&lt;<span style="color: #0000ff;">int</span>&gt; values = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">4</span>, <span style="color: #cc66cc;">5</span><span style="color: black;">&#125;</span>;
<span style="color: #0000ff;">auto</span> model = <span style="color: #0000ff;">new</span> <span style="color: #a020a0;font-weight: 700;">QRangeModel</span><span style="color: black;">&#40;</span>values<span style="color: black;">&#41;</span>;
<span style="color: #a020a0;font-weight: 700;">QListView</span> *listView = <span style="color: #0000ff;">new</span> <span style="color: #a020a0;font-weight: 700;">QListView</span>;
listView-&gt;setModel<span style="color: black;">&#40;</span>model<span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
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 :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">struct</span> LabeledValue <span style="color: black;">&#123;</span>
    <span style="color: #a020a0;font-weight: 700;">Q_GADGET</span>
    <span style="color: #0000ff;">Q_PROPERTY</span><span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> value <span style="color: #a020a0;font-weight: 700;">MEMBER</span> value<span style="color: black;">&#41;</span>
    <span style="color: #0000ff;">Q_PROPERTY</span><span style="color: black;">&#40;</span><span style="color: #a020a0;font-weight: 700;">QString</span> label <span style="color: #a020a0;font-weight: 700;">MEMBER</span> label<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #0000ff;">public</span>:
    <span style="color: #0000ff;">int</span> value;
    <span style="color: #a020a0;font-weight: 700;">QString</span> label;
<span style="color: black;">&#125;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
Vous pouvez créer un modèle à partir d'un std::vector comme ceci :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0">std::vector&lt;LabeledValue&gt; data = <span style="color: black;">&#123;</span>
    <span style="color: black;">&#123;</span><span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">&quot;One&quot;</span><span style="color: black;">&#125;</span>, <span style="color: black;">&#123;</span><span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">&quot;Two&quot;</span><span style="color: black;">&#125;</span>, <span style="color: black;">&#123;</span><span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">&quot;Three&quot;</span><span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>;
<span style="color: #0000ff;">auto</span> labeledValues = <span style="color: #0000ff;">new</span> <span style="color: #a020a0;font-weight: 700;">QRangeModel</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
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 :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td valign="top"><pre style="margin: 0">ListView <span style="color: black;">&#123;</span>
    model: modelProvider.labeledValues
&nbsp;
    delegate: Item <span style="color: black;">&#123;</span>
        required property <span style="color: #0000ff;">int</span> value
        required property string label
&nbsp;
        width: ListView.view.width
        height: <span style="color: #cc66cc;">40</span>
&nbsp;
        Text <span style="color: black;">&#123;</span>
            anchors.centerIn: parent
            text: label + <span style="color: #FF0000;">&quot; (&quot;</span> + value + <span style="color: #FF0000;">&quot;)&quot;</span>
        <span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
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.<br />
<br />
<b>Liaisons bidirectionnelles avec Synchronizer</b><br />
<br />
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++.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td valign="top"><pre style="margin: 0">delegate: Row <span style="color: black;">&#123;</span>
    id: delegate
    required property <span style="color: #0000ff;">int</span> value
    required property string label
&nbsp;
    SpinBox <span style="color: black;">&#123;</span>
        value: delegate.value
&nbsp;
        <span style="color: #808080;">// Extra signal, only for input</span>
        onValueModified: delegate.value = value
    <span style="color: black;">&#125;</span>
&nbsp;
    Text <span style="color: black;">&#123;</span> text: delegate.label <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
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.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0">delegate: Row <span style="color: black;">&#123;</span>
    id: delegate
    required property <span style="color: #0000ff;">int</span> value
    required property string label
&nbsp;
    SpinBox <span style="color: black;">&#123;</span>
        Synchronizer on value <span style="color: black;">&#123;</span>
            property alias source: delegate.value
        <span style="color: black;">&#125;</span>
    <span style="color: black;">&#125;</span>
&nbsp;
    Text <span style="color: black;">&#123;</span> text: delegate.label <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b>Améliorations pour les développeurs Android</b><br />
<br />
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.<br />
<br />
<b>Prise en charge d'Android 15 et 16</b><br />
<br />
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.<br />
<br />
<b>Qt Jenny 1.0</b><br />
<br />
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.<br />
<br />
<b>Amélioration de la gestion de l'écran de démarrage</b><br />
<br />
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.<br />
<br />
<b>macOS et iOS 26</b><br />
<br />
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.<br />
<br />
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.
			
		<hr />
	</div>
</div><b>Source</b> : <a rel="nofollow" href="https://www.qt.io/blog/qt-6.10-released" target="_blank">Annonce de Qt 6.10</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que ces améliorations sont crédibles ou pertinentes ?<br />
:fleche: Quel est votre avis sur cette mise à jour ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://qt.developpez.com/actu/370675/Qt-6-9-est-maintenant-disponible-avec-un-rendu-des-emoji-conforme-aux-derniers-standards-ainsi-que-des-ameliorations-pour-repondre-aux-exigences-modernes-d-OAuth2/" target="_blank">Qt 6.9 est maintenant disponible avec un rendu des emoji conforme aux derniers standards, ainsi que des améliorations pour répondre aux exigences modernes d'OAuth2</a><br />
<br />
:fleche: <a href="https://qt.developpez.com/actu/363629/Qt-6-8-LTS-prend-en-charge-de-nouvelles-plateformes-de-bureau-mobiles-et-embarquees-cette-version-reduit-la-consommation-memoire-de-30-pourcent-et-apporte-un-module-pour-la-realite-augmentee-et-virtuelle/" target="_blank">Qt 6.8 LTS prend en charge de nouvelles plateformes de bureau, mobiles et embarquées. Cette version réduit la consommation mémoire de 30 % et apporte un module pour la réalité augmentée et virtuelle</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p670827d1759979360/c-cpp/bibliotheques/qt/qt-6-10-disponible-backend-audio-pipewire-nombreuses-autres-ameliorations/1.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670828d1759979366/c-cpp/bibliotheques/qt/qt-6-10-disponible-backend-audio-pipewire-nombreuses-autres-ameliorations/2.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f376/c-cpp/bibliotheques/qt/">Qt</category>
			<dc:creator>Jade Emy</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179740/c-cpp/bibliotheques/qt/qt-6-10-disponible-backend-audio-pipewire-nombreuses-autres-ameliorations/</guid>
		</item>
	</channel>
</rss>
