Quelle API pour l'interface graphique Windows?

Bonjour,

Je développe actuellement un petit logiciel (projet de fac) avec une interface graphique en Qt sous linux. Il semble que certains problèmes de synchronisation (ou de réactivité) dûs à cette bibliothèque graphique pourrissent mon programme.

Du coup je me suis demandé : si une bibliothèque graphique peut causer ce genre de soucis (ici c’est Qt 3.0), quelle est la bibliothèque graphique qu’utilise Microsoft pour leur interface graphique de windows XP? Et pour Vista?

Voilà, et merci bien.

Ca me parait bizarre que tu ais des problèmes avec QT sous windows, n’oublie pas que nous en somme à la branche 4.x qui a corrigé/ajouté une palanqué de fonctionnalité, je pense qu’adapter ton code pour cette version te sera beaucoup plus profitable que de l’adapter pour windows en sachant que tu devras tout réécrire : windows utilise les WINAPI (ou MFC), ce sont des fonctions qui dépendent du contrôle que tu utilises (ListView_InsertColumn pour une listview).

Mince, j’ai mal expliqué, désolé.
Donc je programme sous Linux (Mandriva 2006). Oui, on aurait dû (projet en equipe) partir directement sur Qt 4.0. Mais bon, on ne choisit pas toujours tout quand on est en équipe.

Pour Qt 3.x sous windows, en effet, nous n’avions pas eu ce genre de soucis (projet précédent avec la même équipe).

Pour l’interface graphique de windows, c’était juste une question. Donc si j’ai bien saisi, Microsoft utiliserait ses MFC pour faire l’interface graphique de Windows?

Et merci.

En fait non, windows utilise les WINAPI, tu as ici de quoi bien démarrer.
Les MFC sont une couche à la WINAPI pour soit disant l’utiliser à la C++ (oop) mais il n’en est rien, il suffit de jeter un oeil aux fichiers sources des MFC pour se rendre compte qu’il ne s’agit la que d’une bidouille pas propre.

Hello,
XP et antérieur utilisent les WINAPI mais pour vista, cela ne sera plus pareil non ?

Les interfaces seront programmées en XAML ?

http://fr.wikipedia.org/wiki/XAML

Le XAML c’est juste pour laver le cerveau des coders et les inciters à passer au .NET : ouillette utilise QT donc le C++ alors les WINAPI semblent être plus indiqué bien que perso, je pencherais du côté de wxWidgets quitte à réécrire le code pour windows.

Mmm… je viens de regarder WINAPI, ça me rappelle le temps où je faisais de l’OpenGL sous Windows sans glut. Il me semble que c’était exactement ça.

C’est plus bas niveau que Qt ça. Puis c’est pas orienté objet si je ne me trompe pas.
Difficile de rentrer là dedans avec mon cerveau formaté à “object oriented programming is good”. Au moins, l’avantage c’est que c’est plus précis, plus paramétrable (normal puisque c’est plus bas niveau) que Qt.

Pour ma part, je ne peux me permettre d’utiliser WINAPI pour mon projet, puisque le professeur testera cela sous les PC de la fac, sous Mandriva 2006.
Ensuite, pour le passage Qt 3 vers Qt 4, c’est trop tard, même si ça m’aurait plu.

Mais merci beaucoup pour vos réponses.

PS : je me suis quand même pris le petit pdf sur les WINAPI, au cas où. :slight_smile:

C’est pour cela que j’ai parlé de wxWidgets qui s’utilise en C++ et est portable :wink:

Ce sont quoi ces problèmes ? Pour ma part, je développe avec Qt4 depuis plusieurs mois sous Linux et je n’ai pas eu ces problèmes. Je ne les ai pas constaté non plus sous KDE qui utilise Qt3…

Quant aux API Windows, tu peux laisser tomber si ton prof teste tes progs sous Linux…

Le problème, c’est qu’apparement, avec Qt 3.0 sur des machines puissantes et un programme lourd en calculs, il y a des soucis de synchronisation.
Ce qui nous arrive exactement :


unsigned short *picture = new unsigned short[width*height];
...
for(int i=0; i<100; i++)
{
     //algo calculant sans cesse de nouvelles valeurs des éléments de "picture" jusqu'à arriver à une certaine stabilité
}
...
unsigned short *normPicture = getNormalizedData(picture, width*height);// fonction qui renvoie le tableau d'entrée de taille width*height normalisé (fenêtré) entre 0 et 255. 
showPictInPopup(normPicture);//fonction qui utilise Qt : tableau d'entrée dans QImage, QImage dans QWidget, QWidget::show()

Le problème, c’est que parfois l’image affichée est à moitié affichée, à moitié noire.
Cela signifie que certains éléments du tableaux n’ont pas été calculés.
Pour faire simple :

  • soit le “getNormalizedData” n’est pas encore fini que le “showPictInPopup” demarre
  • soit la "boucle for" de la fonction "getNormalizedData" saute des tours
  • soit (le plus probable d’après mes tests) dans la boucle de calculs, où chaque ligne est une fonction qui fait un “for(int i=0; i<width*height; i++)”, il y a des étapes de certains “for” qui sont sautées.

Si vous ne saisissez pas, je peux essayer de réexpliquer, voire vous montrer le code.

Et pour WINAPI/Linux, j’avais saisi.
Merci.

C’est un problème bizarre en effet, tu utilises les threads ? Si c’est le cas, il y a forcément des fonctions de synchronisation dans QT, sinon, une méthode (crade) consisterais à créér une variable globale, de boucler tant que son état est à 0 et signaler son état à 1 dans la fonction qui doit finir son travail.

Nous n’utilisons pas les threads.

Et pour la variable globale, c’est pas bête.
Par contre, c’est vrai que ça fait un peu sale. Puis, faudrait identifier exactement la fonction qui provoque ce problème, pour peu qu’il n’y en ait pas plusieurs.
Dans ce cas (si plusieurs fonctions debloquent) il faudrait mettre des variables globales un peu partout.

Donc, oui, c’est une bonne solution. Mais je ne sais pas si je vais le faire car je n’ai montré qu’un exemple de problème, mais on retrouve ce même truc à différents endroits du code.

Merci encore.