web-dev-qa-db-fra.com

Le cas échéant, qui permet d'obtenir l'apparence native de Windows: GTK +, wxWidgets, Qt, FLTK?

J'ai besoin d'écrire une application qui sera visuellement indiscernable de quelque chose d'écrit nativement pour Windows XP/Vista/7 en utilisant tout ce qui vient par défaut avec le Visual Studio le plus moderne. Mais je développe en utilisant MinGW et Vim (en C++).

En particulier, je veux que les contrôles suivants soient natifs sur les trois versions de Windows ci-dessus: formulaire chrome, boutons, cases à cocher, menus, zones de liste déroulante, barres de progression, barres de défilement, zones de texte enrichi. Ce sera suffisant pour moi.

Je sais que si vous chargez GdiPlus et d'autres choses comme riched32.dll au besoin, et utilisez l'API Windows pour instancier les contrôles, puis le système d'exploitation remplacera sa version de GdiPlus ou d'une autre bibliothèque, il ressemblera donc à XP contrôles de style sur XP, Vista sur Vista, etc.

Mais je ne veux pas utiliser l'API Windows ordinaire, car même la récupération de la police par défaut prend une demi-page de code et des histoires similaires, quoi que je veuille faire. J'aimerais donc utiliser une boîte à outils.

wxWidgets, Qt, GTK +, FLTK semble être le plus utilisé. Mais ils sont tous multi-plateformes. J'ai utilisé des applications multiplateformes, et beaucoup d'entre elles ont des contrôles GUI étrangers (je les appelle des widgets). Donc, ma question est: lequel de ces kits d'outils peut être créé pour produire de véritables contrôles d'interface utilisateur natifs répertoriés ci-dessus, apparaissant correctement sur les trois versions de MSWin répertoriées ci-dessus?

J'ai tapé chacun d'eux + "windows" dans Google Images, mais c'est difficile à dire, sauf que FLTK ne peut probablement pas le faire. Beaucoup d'entre vous doivent connaître la réponse du haut de votre tête ...

29
Evgeni Sergeev

Je ne parlerai pas de FLTK car je ne le sais pas.

  • wxWidgets utilise la boîte à outils native de la plate-forme (GTK sous Linux, API GUI Win32 sous Windows, Cocoa sous MacOS X).
  • GTK utilise une API de thème pour simuler l'apparence de la plateforme (moteur de thème personnalisé sur GTK2, moteur CSS sur GTK3).
  • Qt utilise styles pour simuler l'apparence de la plateforme.

l'API wxWidgets est assez moche d'après ma propre expérience, car il y avait trop de méthodes disponibles sur l'une ou l'autre plate-forme, ce qui rend les choses non portables à moins que vous ne les contourniez. Contrairement à GTK + et Qt, il ajoute également sa propre couche de bogues au-dessus de la boîte à outils qu'il utilise comme backend. Cependant, il s'efforce d'avoir l'aspect natif de la plate-forme car il utilise la boîte à outils native.

GTK + 3 a encore quelques aspérités sur Windows, qu'il prend officiellement en charge depuis GTK + 3.6. Le projet GTK + délègue au projet MSYS2 la distribution des binaires Windows. Comme vous utilisez déjà MinGW, c'est à peu près le même type d'environnement. Ils ont de bonnes liaisons C++ avec GTKmm. Cependant, vous devrez peut-être travailler pour obtenir le bon thème pour votre version de Windows.

Qt est un bon choix pour le développement C++ multiplateforme, la cible principale étant Windows, essaye d'imiter l'aspect et la convivialité natifs de la plate-forme mais a aussi ses propres limitations de thème.

Pour résumer, il n'y a que 2 approches:

  • des boîtes à outils qui fournissent leurs propres widgets et essaient de ressembler à la plate-forme native en fournissant des thèmes (GTK + et Qt)
  • boîtes à outils qui utilisent les widgets natifs mais cachent leur API derrière une couche d'abstraction (wxWidgets)

Ils ont tous deux leur pour et contre.

25
liberforce

Mis à part les détails de la mise en œuvre, la philosophie de wxWidgets consiste, et a toujours été, à avoir un aspect aussi natif que possible. Nous, développeurs de wxWidgets, n'atteignons pas toujours l'objectif de ne pas distinguer les applications natives, mais nous nous efforçons toujours de le faire et. AFAIK ce n'est pas un objectif si important pour Qt et certainement pas pour GTK +, donc à mon avis (évidemment biaisé), wxWidgets est votre meilleur choix si vous voulez vraiment offrir la meilleure expérience à vos utilisateurs, en particulier sous OS X.

Pour répondre plus précisément à votre question, tout ce que vous listez ci-dessus est implémenté à l'aide de contrôles natifs dans wxWidgets pour Windows (le contrôle de texte enrichi n'est cependant pas disponible nativement sous les autres plates-formes).

26
VZ.

IUP - bibliothèque d'interface utilisateur portable utilise des widgets natifs, l'API C et les liaisons Lua.

4
Alex V.

j'ai utilisé Java pour multiplateforme native sans changer le code, utilisé c/c ++ wxwidgets pour exclusivement multiplateforme si vous voulez aller à peu de performances et exécutable autonome, utilisé c/c ++ winapi pour windows et x11 pour gnu linux native platform and terminal console, used python for scripting console and platform if you want your software up to date fast, and used Assembly for a little simple simply pure console. Et parfois je les ai tous combinés avec la bibliothèque partagée .dll sur windows et .so sur gnu linux. Et j'ai aimé faire pour faire des performances comparatives sur les études de programmation avec de petites exigences matérielles.

1
Iton Sandal