- Récapitulatif des résultats après avoir recherché et comparé des bibliothèques pour créer des GUI en C++
- Exigences de base : prise en charge de Windows uniquement, usage commercial autorisé, stylisation facile avec mode sombre inclus, génération d’un seul EXE de moins de 40 Mo avec un minimum de dépendances, développement rapide
WinUI 3
- Au départ, cela semblait être un excellent choix
- Permet d’utiliser des composants Windows modernes et de personnaliser les couleurs du style
- On peut concevoir l’interface avec XAML et même utiliser directement le designer de Visual Studio
- Problèmes :
- La distribution de l’application sous forme non packagée est mal prise en charge
- Lorsqu’on déplace l’application vers une VM ou un autre ordinateur, elle échoue le plus souvent à se lancer
- Il faut fournir de nombreux fichiers
.dll pour gérer les fonctionnalités WinUI
- Impossible de créer un unique fichier
.exe portable
- Aucun problème en mode packagé, mais l’installation sous forme de paquet AppX entraîne des problèmes d’accès à l’API Win32
Win32 / MFC / petites bibliothèques qui encapsulent Win32
- Comme une grande portabilité est nécessaire, il est logique d’utiliser le rendu natif du système d’exploitation
- Le programme peut tenir dans un seul fichier
.exe et rester très léger (avec liaison statique de MFC)
- Il est possible d’utiliser une bibliothèque plus minimale déjà écrite par quelqu’un
- Problèmes :
- Styliser les contrôles Win32 natifs est très difficile
- Il faut écrire des fonctions de peinture personnalisées pour tous les contrôles
- Il existe un mode sombre « caché » utilisé dans l’explorateur de fichiers Windows, mais il ne couvre qu’une partie des contrôles et reste peu convaincant
Qt
- Le Graal des GUI en C++
- C’est complexe, mais on peut le styliser facilement avec les Qt Style Sheets
- Problèmes :
- En liaison dynamique, l’application a besoin de très nombreux fichiers
.dll pour se lancer, et la taille dépasse 40 Mo
- Il est possible de lier Qt statiquement au programme, mais il faut alors soit le rendre open source, soit distribuer les fichiers objets permettant la recompilation à cause de la licence LGPL de Qt
- Sinon, on peut acheter une licence commerciale, mais cela coûte plusieurs milliers de dollars
wxWidgets
- Une bibliothèque facile à apprendre
- On peut utiliser wxFormBuilder
- Sa licence est plus permissive que celle de Qt, et elle peut être liée statiquement dans un exécutable de 3 Mo
- Problèmes :
- Sous Windows, elle utilise les composants Win32 natifs et n’offre pas d’options de stylisation
- Elle prend en charge les contrôles sombres de l’explorateur de fichiers Windows, mais le résultat n’est pas très bon
hikogui
- Une nouvelle bibliothèque GUI en retained mode utilisant Vulkan comme backend
- Elle intègre un mode sombre et se stylise facilement
- Problèmes :
- Il faut apparemment un doctorat en informatique pour réussir à la compiler
- Après plus de 30 minutes à essayer de compiler les exemples, le seul résultat a été un exécutable qui plantait immédiatement avec une violation d’accès dans la bibliothèque Vulkan
Sciter
- Une bonne alternative à Electron qui permet d’écrire des GUI d’applications de bureau en HTML/CSS
- Problèmes :
- La taille finale de l’application, environ 25 Mo avec tous les fichiers
.dll, semble problématique, mais reste acceptable
- Ce serait encore mieux si c’était open source et si une version à liaison statique pouvait être utilisée commercialement
- Ce n’est pas aussi cher que Qt ($310), donc ce serait acceptable de payer
- Le problème, c’est que le rendu n’est pas très bon
- Il y avait des problèmes d’aliasing sur les polices et les images
- La fenêtre a un cadre gris assez épais (2-3 px) qu’on ne peut ni personnaliser ni modifier
WinForms / WPF
- Quand on pose une question sur les bibliothèques GUI en C++, la plupart recommandent d’utiliser une autre stack
- On vous dit que le C++ est une mauvaise idée, et qu’il vaut mieux écrire le frontend du programme dans une autre stack puis charger les fonctionnalités écrites en C++ sous forme de composants/modules
- On peut avoir un seul
.exe de petite taille et utiliser WinForms/WPF
- Il suffit d’intégrer les
.dll comme ressources de l’application, de les extraire dans un dossier temporaire, puis d’utiliser P/Invoke pour appeler les .dll compilées depuis l’application C#/.NET, ou d’utiliser C++/CLI
- Problèmes :
- Le framework .NET est préinstallé sur Windows 10 et plus, donc techniquement cela respecte le critère d’absence de dépendances
-
- Si l’on intègre les
.dll, il faut tout de même les extraire quelque part et écrire du code supplémentaire pour que P/Invoke fonctionne
-
- C++/CLI est compilé en code IL .NET, ce qui donne l’impression d’un code C++ traduit en C#
La solution ?
- Pour une application simple, il ne semble rien y avoir de plus adapté que Dear ImGui
- Pour concevoir une interface complexe, cela présente surtout des inconvénients, et comme il ne s’agit pas d’une interface en retained mode mais en immediate mode, il faut faire tourner un moteur de rendu GPU comme DirectX à plus de 60 images par seconde pour l’UI
- Mais sur tous les autres points, cela correspond
- Le programme compilé ne fait que 500 Ko, et il n’est pas nécessaire d’installer les redistribuables VC++
L’avis de GN⁺
- Comme le dit l’auteur, il ne semble pas exister de bibliothèque parfaite pour développer des applications GUI. Il y a des compromis selon les exigences
- Pour les applications simples, Dear ImGui semble être le choix le plus adapté, mais pour des interfaces complexes, il vaut mieux utiliser un toolkit GUI en retained mode
- Pour créer une application commerciale, le coût de licence peut être un facteur important. Des bibliothèques comme Qt sont coûteuses, alors que wxWidgets peut être utilisé gratuitement
- Créer une application GUI en C++ n’est pas simple, donc il peut être plus réaliste de développer le frontend en C# ou dans un autre langage, et de n’implémenter en C++ que les parties intensives en calcul
- Si l’on veut un look-and-feel natif sous Windows, il vaut mieux utiliser WinUI ou MFC, mais si l’on a besoin d’un support multiplateforme, Qt ou wxWidgets peuvent être de meilleurs choix
7 commentaires
hikogui, ça fait vraiment peur, ça fait froid dans le dos
https://getstream.io/blog/flutter-desktop-vs-electron/ comparaison des performances selon différents indicateurs
Comparé à Sciter et Electron, Flutter Windows Desktop Build mérite aussi d’être envisagé. Il existe parfois des plugins avec quelques bugs, mais les bases sont solides, ce qui le rend utilisable comme vecteur de diffusion.
Instance singleton, mises à jour automatiques, barre d’état, notifications Windows, temps de lancement rapide, langage Dart, plugin Win32API, etc.
Delphi
C++ Builder
"Il faut un doctorat en informatique pour réussir à compiler"
mdr
Commentaire Hacker News