Une libraire pour des petits programmes GUI

Je cherche une libraire, mais le choix est dur.

a marqué ce sujet comme résolu.

Bonjour à tous,

Mon objectif est donc de créer des programmes GUI en C++ très petits et de les distribuer à quelques utilisateurs. Par exemple, un petit patch, un installeur, un convertisseur… Les utilisateurs seraient très ciblés et donc peu nombreux (enfin, à priori). Ainsi, je me demande : quelle bibliothèque C++ devrais-je utiliser ?
Les critères seraient les suivants :

  • Les programme seront (en tout cas) pour Windows (pas forcément pour d'autres plateformes)
  • Ils seront sous la forme d'un exécutable simple (pas de DLLs ou je ne sais quoi)
  • Ils devront être (suffisement) légers en taille
  • Ils devront afficher les boutons et champs de textes natifs de Windows (ou quelque chose d'assez semblable)
  • Pas de bibliothèque nécessitant une licence, des copyright etc…

Et voici une liste de bibliothèques GUI et ce que je peux en dire :

Qt

Déjà testé. Simple, agréable d'utilisation. Mais beaucoup trop lourde pour ce genre de petit programme. De plus il n'est pas (facilement) possible de distribuer l'exe sans DLLs. Ensuite, il me semble qu'il y a des règles à suivre dès le moment qu'on distribue une telle application, mais je ne me suis pas beaucoup renseigné, car je l'ai assez vite enlevé des possibilités.

FLTK

Déjà testé. Cette fois au contraire, très petite et légère. Cependant, pas très belle, les textes et boutons ne sont pas très semblable à ceux de Windows. Les animations sont faibles.

MFC

Pas encore testé. C'est la bibliothèque officielle de Microsoft en C++. Malheureusement, il semble qu'il faille utiliser de préférence l'IDE Visual Studio, je préférerais une bibliothèque indépendante de l'IDE. J'ai aussi cru comprendre qu'elle n'était pas très agréable à utiliser, et que la doc était pas terrible.

wxWidgets

Pas encore testé. Je la connais très peu, mais j'ai lu qu'elle était semblable à MFC, mais en mieux. Est-elle bien pour les petits programmes ?

Autres

Y aurait-il d'autres bibliothèques conseillées pour les petits programmes GUI ?

Voilà, j'espère que vous saurez éclairer mon choix, me corriger si j'ai dit quelque chose de faux ou d'imprécis, et je remercie d'avance ceux qui répondront. :)

+0 -0

Salut,

Je n'ai pas grand chose à ajouter n'ayant testé que Qt, mais le langage utilisé serait donc forcément le C++ ? (il me semble que ça devrait être précisé :P )

Sinon de nom, y'a gtkmm (la version C++ de GTK+) mais je n'en sais pas plus.

+0 -0

Tu as vraiment besoin du c++ ? C'est pour faire quoi comme appli ? Parce que sinon il y a toute la plaforme .net qui est intégré a tous les windows depuis un moment. Tu peux toujours faire du C++ cli mais le mieux reste du C# quitte a mettre des morceaux de natifs.

Btw si tu veux faire petit et léger sans dépendance, il n'y a bien que l'API windows native qui répond a ton problème mais tu va morfler.

Tu as vraiment besoin du c++ ? C'est pour faire quoi comme appli ? Parce que sinon il y a toute la plaforme .net qui est intégré a tous les windows depuis un moment. Tu peux toujours faire du C++ cli mais le mieux reste du C# quitte a mettre des morceaux de natifs.

Btw si tu veux faire petit et léger sans dépendance, il n'y a bien que l'API windows native qui répond a ton problème mais tu va morfler.

Kje

C++ .Net ?

+1 -0

WXWidgets du point de vue de la taille et des dépendances, c'est peu ou prou la même chose que QT.

ON peut parfaitement utiliser l'API Win32 sans VS. D'ailleurs c'est ce que je fais. Si tu as des questions plus précises par rapport à l'API Win32 je suis suceptible d'aider. Je ne suis pas un expert pour tout mais trois de mes créations principales sont en API Win32.

La doc n'est pas nulle, c'est pas vrai, la MSDN est assez bien fournie. ON peut même trouver quelques exemples pour certaines tâches bien précises. Le problème c'est plutôt de retrouver ce qu'on cherche, c'est assez bordélique, tout simplement parce que, en fait, on peut tout faire: GUI, réseau, gestion de fichiers/dossiers/périphériques, multimédia…

Par contre effectiement, niveau difficulté, c'est pas ce que se fait de plus simple. IL faut d'abord bien assimiler les concepts de base: boucle d'évènements, procédures de fenêtre, messages/notifications… le genre de choses que QT et les autres abstraient habituellement pour simplifier la vie.

Tu peux peut-être commencer par là: https://msdn.microsoft.com/fr-ch/library/bb384843.aspx et https://msdn.microsoft.com/fr-ch/library/cc433218.aspx

Bonne chance !

+0 -0

Lu'!

De toute façon, se casser le cul à faire l'interface graphique directement en triturant du code c'est pas la manière la plus simple de faire. Que ce soit en utilisant Qt ou Windows, il vaut largement mieux passer par leurs formats QML/XAML pour dessiner l'interface, ce sera plus simple et, en particulier, avoir un MVC sera plus évident.

MFC devrait aujourd'hui être abandonné au profit de WPF.

Après, tu codes le coeur de ton application en C++, mais l'interface graphique, ça ne t'apportera rien (d'autant qu'avec un MVC bien réalisé, tu es sensé pouvoir changer ça en un tour de main).

Le poids des DLL est un faux problème.

Que ce soit en utilisant Qt ou Windows, il vaut largement mieux passer par leurs formats QML/XAML pour dessiner l'interface, ce sera plus simple et, en particulier, avoir un MVC sera plus évident.

Ksass`Peuk

L'équivalent de XAML en Qt est le système de ui avec Qt Designer. QML est destiné aux interfaces fancy qui demande à sortir du style classique, disons. Et point de vue lourdeur, QML est bien classé…

Quant au système ui, il est tout aussi pratique que XAML à ceci près qu'il vaut mieux avoir de bonnes bases en Qt. Sinon, tu as vite fait de devoir te battre avec tes layouts…

C++ .Net ?

Eskimon

Oui c'est pour ça que je parle de [C++ Cli}(http://en.wikipedia.org/wiki/C%2B%2B/CLI)

BTW je reste persuadé que la liste des contraintes n'est pas forcément la plus adapté au problème. Pour une petite appli qui doit faire une petite taches a quelques utilisateurs, je suis pas persuadé que ces contraintes (C++, gui sans dépendances ni dll, etc. ) soient pertinente.

En fait, j'aimerais réaliser des petits outils, et je trouvais cela plus agréable de pouvoirs les distribuer sans dépendance et sans DLLs.

Je vois souvent des petites applications portables ou il n'y qu'un .exe à télécharger (sans prendre en comptes les readme.txt etc…), par exemple HxD, Mp3tag ou Tixati pour n'en citer que quelques-un. Mais là je ne sais pas s'ils ont été codés en C# ou autre.

Disons que j'ai déjà réalisé un programme avec FLTK, mais je suis assez peu fier du résultat graphique. Je ne connais ni C# ni C++/CLI, du coup je ne sais pas si je pourrais facilement réécrire la partie du code algorithmique dans ces langages. C'est pour ça que je cherche une bibliothèque C++ de préférence.

Du coup que me conseillez-vous ? Sachant que j'ai déjà codé la partie algorithmique, devrais-je partir dans du C# ou C++/CLI ? Ou dans du XAML ?

ON peut parfaitement utiliser l'API Win32 sans VS. […]

QuentinC

Oui, mais je parlais de MFC, pas de Win32, que je n'ai pas inclus puisque c'était plus du C que du C++.

Je ne connais ni C# ni C++/CLI, du coup je ne sais pas si je pourrais facilement réécrire la partie du code algorithmique dans ces langages. C'est pour ça que je cherche une bibliothèque C++ de préférence.

Loris

Justement, rien ne t'oblige à refaire le coeur algorithmique de ton application. Binder du C ou du C++ dans du C#, c'est pas terriblement compliqué et c'est bien documenté. A savoir qu'une manière très simple de faire, serait par exemple d'avoir la partie métier de ton application produite comme une bibliothèque dynamique et ton morceau d'interface graphique en C# qui se contente à chaque action de produire le bon appel à la partie métier et de récupérer les résultats.

D'accord merci :) , j'irai donc me renseigner sur le binding, et ferai probablement une interface WPF.

[…] A savoir qu'une manière très simple de faire, serait par exemple d'avoir la partie métier de ton application produite comme une bibliothèque dynamique et ton morceau d'interface graphique en C# […]

Ksass`Peuk

Je suppose donc que je puisse aussi en faire une bibliothèque statique ? Puisque j'essaie si possible d'éviter les DLLs.

Pourquoi serait-ce un faux problème ? Je veux dire, qu'est-ce qu'on gagne d'avoir des DLLs ? Perso, je trouve plus clean d'avoir juste un petit exe à télécharger en zip lorsqu'il s'agit d'un petit outil. Parce que :

  • en aucun cas il y aura de problème "DLL introuvable". Il m'est souvent arrivé de voir des utilisateur peu compétents se plaindre de cet erreur, juste parce qu'ils ont déplacé l'exe pour faire un peu de tri.
  • pas besoin de droits d'amin. Un installeur a souvent besoin des droits d'admin pour installer dans "Program Files", et perso j'évite de donner les droits d'admin à un programme pas très connu.

Je veux dire, qu'est-ce qu'on gagne d'avoir des DLLs ?

Loris

Si on se contente de faire un dossier posé à l'arrache au milieu de nulle part. Rien du tout. On a exactement le même comportement.

Si on s'y prend correctement, à savoir en fournissant de quoi installer les DLL proprement par le système, on gagne sur tous les tableaux : d'abord si une DLL existe déjà elle ne sera pas dupliquée (quand on lie une bibliothèque en statique, on obtient le même comportement qu'en répliquant les DLL partout). Quand on propose un système de mise à jour, si les DLL n'ont pas changé, pas besoin de les re-télécharger. Quand on fait tourner plusieurs applications utilisant les mêmes DLL, le système n'aura pas besoin de dupliquer celles-ci en mémoire RAM.

  • pas besoin de droits d'amin. Un installeur a souvent besoin des droits d'admin pour installer dans "Program Files", et perso j'évite de donner les droits d'admin à un programme pas très connu.

Loris

Un programme pas très connu, tu ne le laisses pas s'exécuter tout court, si c'est un exploit, t'auras rien gagné au fait de ne pas lui donner les droits d'admin. Par contre, si tu fais un MSI, tu as toujours la possibilité de le faire signer pour qu'on lui accorde de la confiance.

Oui, mais je parlais de MFC, pas de Win32, que je n'ai pas inclus puisque c'était plus du C que du C++.

Ca change rien, tu peux utiliser l'API Win32 en C++ aussi.

L'API Win32, c'est pas simple à maîtriser mais au moins ça reste léger.

+0 -0

@Ksass: Oui je suis d'accord sur ces points, mais en l’occurrence, comme ça serait juste pour le binding, je ne risque pas d'utiliser ces DLLs plusieurs fois, car elles contiendraient des fonctions très spécifiques au programme. Et s'il y a une mise à jour, il y a de fortes chances que ce soit le contenu des DLLs qui soit à télécharger plutôt que la partie interface (voir les deux souvent). D'ailleurs beaucoup de programmes n'ont pas de DLL (comme ceux que j'ai cité) et personne ne s'en plaint.
Disons que j'aime le concept du "programme qui contient tout". Et je pense que dans ce cas de petit outil, les DLLs n'apportent pas grand aide.

Après c'est clair, avec un projet plus grand, je pourrais profiter des avantages de ces bibliothèques dynamiques. Merci pour ces quelques explications. :)

Ensuite, l'installation c'est une autre histoire. Je ne pense pas qu'une installation complète soit nécessaire pour un petit outil comme ça de tout manière.

Ca change rien, tu peux utiliser l'API Win32 en C++ aussi.

L'API Win32, c'est pas simple à maîtriser mais au moins ça reste léger.

QuentinC

Oui, mais justement, c'est assez compliqué et ça demande beaucoup de lignes de code pour pas grand chose. Et faut dire que je préférerais une bibliothèque orientée objet.

Oui, mais justement, c'est assez compliqué et ça demande beaucoup de lignes de code pour pas grand chose. Et faut dire que je préférerais une bibliothèque orientée objet.

C'est marrant qu'un dev C++ dise ça car c'est pas spécialement le language le plus concis pour beaucoup de taches.

Je crois que tu te prends la tête pour pas grand chose, à partir du moment où tu distribues ton programme à quelques personnes. Faire gaffe à la taille, aux dll ou même la licence, c'est important pour des petits utilitaires qui sont utilisés par beaucoup de monde, mais quand tu en as que quelques uns, osef. Prend ce qu'il y a de plus simple et plus rapide pour toi

+2 -0

Qt n'est pas si lourd que ça, même si t'as quelques DLL qui font quelques Mo, ce n'est pas un problème avec les machines et les débits d'aujourd'hui. Sinon pour faire des petits utilitaires simples comme ça je te conseillerais de t'orienter justement vers un langage simple et léger : Python. C'est bien adapté pour faire ce genre de choses, et tu pourrais utiliser la librairie Tkinter qui est directement intégrée dans Python et qui est très simple à utiliser. ;) Sinon si tu veux vraiment rester en C++ et ne pas utiliser Qt, le mieux d'après tes contraintes semble wxWidgets. Mais honnêtement tu mettras autant de temps à apprendre wxWidgets qu'à apprendre les bases de Python et Tkinter. Edit : Tu peux aussi envisager Java, pourquoi pas, mais c'est intéressant que si tu connais déjà le langage.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte