Gambas France BETA


Pas de compte ? Incription

GTK+ ou QT ?.. Un choix cornélien...

12
AuteurMessages
Foromus#1 Posté le 27/2/2011 à 18:15:00

Quand je lance un « Nouveau projet », j'ai le choix : graphique, gtk+, qt, etc.
Choix assez illusoire il me semble, car, dans les « composants », je peux sélectionner tel ou tel, sous réserve de compatibilité entre eux. Ce qui signifie déjà que je ne peux pas tout faire dans une application, pour peu que mon besoin fasse appel à tel composant, et qu'il réclame un peu plus loin tel autre, malheureusement incompatible avec le précédent...
Donc, ma première question est simple : je choisis quoi ?
Comment savoir, avant de commencer, si je dois prendre qt ou gtk ? Ou graphique ?
Au fait, si j'ai démarré en qt, est-ce que j'ai le droit de passer en gtk ? Et si oui, comment ? En cochant / décochant les composants ?

Concrètement, je suis sur un projet (déjà réalisé en VB) et que je voudrais transposer en gambas, tout en apportant moult améliorations, cela va de soi. Donc, une refonte totale (autre présentation, autres fonctions).
J'ai commencé ma préparation en étudiant concrètement (et testant) le déroulement de certaines phases, celles qui peuvent poser des difficultés, et cela avant de me lancer dans le projet proprement dit.
Suite à une réponse dans une de mes discussions (un slider un peu têtu), l'intervenant m'avait dit qu'il avait fait des essais, concluants chez lui (pas chez moi, hélas), et d'ajouter qu'il était sous « qt ». Comme il m'a semblé que qt devait être plus récent que gtk (même +), j'ai tenté le « qt » dans mes essais, en particulier pour la partie centrale de mon projet, celle qui est la plus compliquée.
Pour faire simple, je dirai que dans mon projet, j'ai besoin de labels (ou de textbox) qui ont la propriété « autoresize » qui fonctionne. Or, ceci n'est pas toujours le cas. Avec qt, l'autoresize d'un label fonctionne bien en longueur, la contrôle s'adapte bien à la longueur du texte. Avec gtk, le contrôle textbox garde sa largeur initiale et développe une seconde ligne ou plus, si nécessaire. Toujours avec gtk, le label reste comme on l'a mis, autoresize ou pas... Voilà qui est bien gênant. Pour couronner le tout, j'ai remarqué qu'avec qt, je ne peux que rarement mettre de la couleur en fond de contrôle c'est interdit pour les boutons, interdit pour les labels et les textbox, mais ça passe pour les listbox ! Allez donc savoir... Que cela est décevant : j'adore mettre mes boutons en couleurs, et aussi mes labels et autres... j'ai connu la télé en N&B, maintenant, on est passé à la couleur... Peut-être même à l'écran plat, qui sait ?..
Ah, à propos de bouton : qu'est-ce qu'il y a comme différence entre « bouton » (présenté OK), et « togglebutton » ? Pourquoi ne pas prendre l'un à la place de l'autre et réciproquement ?
Et les caractères ? Il n'y a pas que moi qui aie mauvais caractère...
A plusieurs reprises, j'ai été incapable de mettre deux fois la même font dans deux contrôles identiques sur le même formulaire ! Pire encore : deux fonts identiques sur deux contrôles identiques affichaient des choses différentes... Comme je ne veux pas enfoncer le clou à tout prix, j'aurai l'honnêteté de préciser que cela est (probablement) arrivé quand j'ai récupéré du code de GB2 et que j'ai transposé dans du GB3, Mais, vu les soucis qu'il y a eu à la transhumance, je peux admettre à la rigueur... La seule solution trouvée fut de virer le contrôle concerné pour recréer le même.
Par contre, il y a une chose qui me chagrine à propos des polices, c'est que je n'ai pas trouvé de police à chasse fixe (largeur de « m » = largeur de « i »), et ça, ça me complique bien la vie, car j'ai besoin précisément de cette police fixe. Certes, je peux jouer sur la longueur du contrôle qui va la supporter, mais ce n'est pas vraiment exact, surtout si un caractère arrive à la mauvaise place. Et pire encore, si ma propriété « autoresize » coince comme dit plus haut, il ne me reste plus que le courant de la rivière pour me noyer dans le désespoir...

Pour conclure, et dans l'immédiat : je cherche à utiliser un label avec une propriété autoresize qui fonctionne vraiment en largeur (et pas en hauteur), label où je peux mettre la couleur de fond que je souhaite, label dans lequel j'affiche une police à chasse fixe. Une fois tout cela trouvé, je pourrai continuer...

Bien, vu les conditions de fonctionnement de GB et le peu de ce que je sais faire avec pour l'instant, je suis incapable de poursuivre mon projet, l'abandon me paraît inévitable, ce n'est pas une catastrophe, je n'en ferai pas une déprime, mais ça me chagrine un peu, c'est tout.
Merci de votre attention (pour ceux qui auront tout lu....)

GB 2.99 sous Ubuntu 10.04 LTS
manu#2 Posté le 27/2/2011 à 21:18:00
Avec Gambas ca roule !Qt et GTK sont des bibliothèques, ce sont en fait des bout de programmes, des fonctions, des fenêtres etc qui peuvent etres reprise par les programmeur pour éviter de réinventer la roue.
Concrètement, la fenêtres pour enregistrer ou choisir un fichier, la fenêtre de paramétrage de l'imprimante mais aussi un navigateur font parti du tool Kit (boite a outils) Qt ou gtk+. Il existe bien d'autres bibliothèques, certaines sont multiplate-forme (GTK, QT) d'autres non, certaines sont totalement libres, d'autres non.

C'est déjà une différence entre les deux que tu cites : GTK est complètement libre alors que la licence de QT l'est un peu moins (mais dans notre cas ca n'a guerre d'importance).

Les possibilité de QT sont extrêmement importante et de très bonnes qualité, son WebKit a par exemple été repris par google pour son navigateur (super rapide) Google Chrome.

QT est la bibliothèque de KDE et GTK, celle de Gnome, donc si tu destines ton application a une utilisation plutôt sous gnome, utilise GTK, si tu la destine plutôt a KDE, utilise plutôt QT. En fait, quelque soit la bibliothèque, ton application tournera sur n'importe quel bureau mais l’intégration de celle ci dans ton bureau sera meilleur si utilise GTK sous gnome ou QT sous KDE.
Dans Gambas, le choix "application graphique" permet en fait de choisir le toolkit de ton application en fonction de celui utilisé par le bureau. Idéalement c'est le meilleur choix, Mais comme tu le soulignes, les possibilités de QT et GTK dans gambas ne sont toujours pas au même niveau, GTK a toujours un peu de retard dans Gambas, et cela est d'autant plus vrai dans gambas 3 parce que c'est une version en développement....Mais à terme, les deux toolkit offrirons les mêmes possibilités.

Personnellement j'utilise toujours QT.
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
spheris#3 Posté le 28/2/2011 à 11:42:00
Foromus,
pour abonder dans le sens de Manu, j'utilise moi aussi Qt mais pour une toute autre raison.
Je sais maintenant que Benoit Minissini, le développeur de gambas travaille par défaut sous qt. Donc bien plus avancé et moins buggué que gb.gtk.
Et chez moi qt semble bien plus agréable visuellement que gtk.
;) ;)
manu#4 Posté le 28/2/2011 à 15:41:00
Avec Gambas ca roule !l'aspect visuel depend cependant plus de la distribution que de la bibliothèque utilisée...

Oui Benoit utilise plus qt car c'est le toolkit utilisé pour le developpement de gambas pour ses nombreuses qualités et peut aussi parce qu'il est sur kde je crois ;)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
Prokopy#5 Posté le 28/2/2011 à 16:33:00
Kinder PinguiLe principal atout de Qt est qu'il est énorme et très puissant, principalement du fait que c'est une grosse société qui tourne derrière (Nokia). Surtout que quand on regarde bien, gb.qt4 ne couvre actuellement qu'une toute petite partie de la puissance de Qt (qu'on utilise en C++). Quand on sait que gb.qt4 ne couvre que la partie "Fenêtres" (avec un peu WebKit et OpenGL), ça fait peur quand on regarde tout ce Qt couvre en plus :affraid: : http://doc.qt.nokia.com/4.7-snapshot/modules.html

De plus, quand je programme en C++ j'utilise aussi Qt (et je m'amuse à mes heures perdues à essayer de porter sa dernière version sur Gambas ;) ).

C'est pour tout ça que j’utilise moi aussi gb.qt4. :)

Et manu, on écrit Qt, pas QT. :D
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Foromus#6 Posté le 28/2/2011 à 18:10:00
Bonjour à tous,

Suite à ce que dit Manu, je réagis primairement, en me disant que, puisque je suis sous Gnome, il est plus judicieux que je prenne l'option GTK. Et de fait, le graphisme en GTK est nettement supérieur à celui de Qt, dans ma configuration Gonme, j'entends. Maintenant, est-ce que je devrais passer à KDE pour autant ? Je suis habitué à mon environnement, je n'ai pas spécialement envie de changer, d'autant que toutes mes autres applications tournent très bien sous Gnome et que le graphisme me convient parfaitement.
Ici et concrètement, je suis face à des incompatibilités, je me dis qu'il n'est peut-être pas utile que je fasse appel aux anxiolytiques pour un projet qui, en tout état de cause, ne servira qu'à moi, et encore, c'est plus le plaisir de le mener à bien qui me motive, plutôt que son usage. Je vais voir si le fait d'utiliser Qt me permet d'avancer, quitte à rester avec un graphisme assez dégueulasse, genre boutons aux coins bien carrés, bruts de sciage, une absence de coloration, des arrêts intempestifs, du genre

" Le programme s'est arrêté de manière inattendue
en déclenchant le signal #11.

Veuillez envoyer un rapport d'erreur à
gambas@users.sourceforge.net.

etc.. A part ça, ça pourrait marcher un peu, en persévérant par tâtonnements. Bon, si c'est ça que vous appelez un programme puissant évolué, pourquoi pas ? Je n'ai pas la connaissance requise pour juger.
Mais comme je ne sais pas si ça vient de Gambas ou de mon environnement Gnome, je ne vois pas comment trouver une solution. Pour l'instant, je constate que, avec GTK, j'ai un graphisme convenable, mais des fonctions inopérantes, avec Qt, ce n'est guère mieux.
A mon avis, je ne vais pas me prendre la tête, je vais laisser tomber, peut-être que dans quelques années, les choses seront améliorées - possible qu'avec une nouvelle version long terme de Ubuntu, les choses s'arrangent un peu, sous réserves que d'ici là, le gâtisme qui me guette ne m'ait pas totalement avachi...
manu#7 Posté le 28/2/2011 à 19:00:00
Avec Gambas ca roule !Personnellement Foromus, pour simplifier on te conseil tous d'utiliser plutot Qt même si tu es sous gnome ! :). C'est mon cas et je trouve ca d’ailleurs très jolis :



Concernant les nombreuses erreurs dont tu parles, je ne crois pas que ce sois des bugs...Foromus :) mais plutôt des erreurs d'utilisations.

Si tu penses que ce sont des bugs, passe sur la version 2 car elle est très stable :)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
spheris#8 Posté le 1/3/2011 à 09:23:00
Foromus,
" Le programme s'est arrêté de manière inattendue
en déclenchant le signal #11.


Cette erreur est du à ubuntu dans la bibliothèque sonore et n'a rien avoir avec Gambas.

Même en étant sous gnome, j'utilise Qt pour son rendu graphique nettement plus jolie.
Au passage, tu pourras aisément personnaliser gtk ou Qt pour l'améliorer visuellement.
A+
;)
Foromus#9 Posté le 1/3/2011 à 11:24:00
Bof.....

Oui, erreur #11, je me souviens d'avoir déjà eu ça, il y a déjà un moment. Si ça vient de Ubuntu, "ils" auraient peut-être du corriger depuis longtemps.

Pour le rendu graphique plus joli, il est probable que la chose relève du subjectif, et dans ce cas, le jugement reste personnel. Je suppose aussi que la machine y est pour beaucoup.

Autrement, et en plus des considérations ci-dessus, il y a une autre limitation qui me chagrine : l'impossibilité d'indexer une série de contrôles. Dans mon cas précis, et comme je n'ai pas de solution (mauvais fonctionnement de la propriété Autoresize, et manque de polices à chasse fixe), je me suis dit que j'allais ruser. J'ai pensé mettre un label pour chaque lettre que je veux afficher. Effectivement, cela peut coller, mais mon besoin étant de 4 fois 25 caractères (minimum), cela m'oblige à créer 100 labels (synchronisés) - ce qui n'est pas un drame en soi, par contre, pour les renseigner un par un, et vu que chacun a forcément un nom différent, çà devient imbuvable ! Reste le Select Case pour remplir tout ça, je vais me retrouver avec 5 pages de code pour pouvoir afficher deux lignes...

Ah, pendant que je suis de bonne humeur : j'ai essayé ce matin de recopier la couleur de fond d'un label, pour la mettre sur un autre label : impossible d'y arriver, que ce soit par la pipette livrée dans la boîte de couleur ou le classique copier / coller. Il faudra que je cherche comment faire. La seule solution trouvée fut de les sélectionner tous, et de renseigner la propriété Backgraound dans les propriétés. Renseigner par le code n'était pas non plus une solution particulièrement judicieuse.

Bon, comme j'ai dit plus haut, "on verra ça plus tard". J'ai fait des choses jusque-là qui fonctionnent bien, il se trouve que pour ce projet, j'ai misé nettement au-dessus de mes moyens.
spheris#10 Posté le 1/3/2011 à 16:05:00
Foromus,
je t'invite à télécharger l'exemple de jacques qui y traite des notions de groupe (d'index comme tu dis) par la propriété TAG et GROUP
cela te permet en une ligne d'indexer le contrôle que tu veux.
le lien ICI :
http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=157

En ce qui concerne la oculeur de fond d'un label, dans la mesure où ce sont les mêmes, crée en un puis duplique le par copier/coller dans l'IDE et il gardera ses propriétés intactes.
J'irai même plus loin en disant que si tu lui donne un nom du style monlabel, le prochain dupliqué sera monlabel1 ,monlabel2 etc...

Enfin, pour utiliser une casse différente dans un même label utilise plutôt le composant TEXTLABEL et non LABEL.
http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=719
;) ;)
Foromus#11 Posté le 1/3/2011 à 19:55:00
Bonsoir,

A défaut de mener à bien mon actuel projet, cela m'aura permis d'apprendre à mieux connaître Gambas.
(Je vais voir le lien ci-dessus prochainement, pour un autre projet).

Une nouvelle découverte :
Soit le code suivant :

A, B, de type string

A = "antérieur"

B = Mid(A,3,1) ' avec ou sans le $
Normalement, je vais avoir B = "t"

Maintenant, si je fais
B = Mid(A,4,1)
Que va valoir B ?

Je m'attendais à trouver "é" et j'ai obtenu ? dans un losange !

Même chose pour tous les accentués "é, è, ç, à et le ù"


Mais là, je ne sais pas si ça dépend de Gambas ou de ma configuration Ubuntu...
Prokopy#12 Posté le 1/3/2011 à 20:25:00
Kinder PinguiPour les chaînes UTF8, il faut utiliser String.Mid(). ;)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Foromus#13 Posté le 1/3/2011 à 21:16:00
Merci beaucoup Prokopy, je n'aurais jamais trouvé ça tout seul...
Foromus#14 Posté le 6/3/2011 à 18:25:00
Bonjour,

Il y a quand même un petit souci avec les lettres accentuées, même avec l'option "String".
Je vais essayer d'être clair.
Avec mon éditeur de texte par défaut (ici gedit de Ubuntu), j'ai créé des fichiers, tous de même style. Chacun comporte une dizaine de lignes, chaque ligne étant composée de caractères (oui, c'est banal..), du genre :

as st et fq ék gh
cd abcd èp lmn ds
kt ça à peu près
...etc...

Dans mon projet Gambas, j'ouvre le fichier choisi et je charge, ligne par ligne :

Dim MaLigne As New String[15] ' 15 correspond au max de lignes possibles
Dim N As Integer

Ensuite :

Open Fichier For Read
While .. Eof
.....Input MaLigne[N]
N += 1
Wend

Oh, ça marche, chaque ligne se charge normalement, par contre, tous les caractères "éèçà" sont remplacés par un point d'interrogation dans un losange, comme dit dans mon commentaire plus haut.

Suite au conseil de Prokopy (qui fonctionne dans un autre cas presque similaire), j'ai tenté ceci :

Input String.MaLigne[N]

C'est refusé.
Ensuite, j'ai tenté une variable intermédiaire déclarée String elle aussi, au cas où.... (Faut bien essayer quelque chose...)

Input VarInter
MaLigne[N] = String.VarInter

Là non plus, Gambas n'en veut pas...
Décidément, je n'ai pas de chance aujourd'hui !

Bon, on va ruser un peu :

Input VarInter ' Soit ma ligne en entier dans ma variable temporaire VarInter
For I = 1 to String.Len(VarInter)
MaLigne[N] = MaLigne[N] + String.Mid(VarInter, I, 1) ' Je découpe, lettre après lettre
Next
N +=1
....etc...

Et là, pas de pot, ça ne marche toujours pas : arrivé à ""String.Mid(VarInter, I, 1) "", Gambas me dit qu'il préfèrerait un type Float...

En résumé, mon problème est simple à énoncer :
Comment récupérer mes lignes et afficher correctement les à, ç è, é qui s'y trouvent ?

(Pour le reste, je m'en suis tiré à peu près bien...)
spheris#15 Posté le 6/3/2011 à 20:06:00
Foromus,

petit rappel : il existe sous linux de nombreux types d'encodage de caractères UTF8, WINDOWS,etc...

Gambas travaille exclusivement en UTF8 :
http://gambasdoc.org/help/def/utf8?fr

pour savoir dans quel encodage tu te trouves sous ubuntu, dans un terminal en ligne de commande, tape :

locale

le résultat suivant apparaît chez moi :

1
LANG=fr_FR.UTF-8LC_CTYPE="fr_FR.UTF-8"LC_NUMERIC="fr_FR.UTF-8"LC_TIME="fr_FR.UTF-8"LC_COLLATE="fr_FR.UTF-8"LC_MONETARY="fr_FR.UTF-8"LC_MESSAGES="fr_FR.UTF-8"LC_PAPER="fr_FR.UTF-8"LC_NAME="fr_FR.UTF-8"LC_ADDRESS="fr_FR.UTF-8"LC_TELEPHONE="fr_FR.UTF-8"LC_MEASUREMENT="fr_FR.UTF-8"LC_IDENTIFICATION="fr_FR.UTF-8"LC_ALL=


si ton Linux préféré n'est pas sous UTF8,pour convertir un fichier vers l'UTF-8 et inversement

Utilise le programme iconv (à récupérer via synaptic) en ligne de commande :

1
iconv -f iso-8859-1 -t utf-8 <in >out # vers UTF-8 iconv -f utf-8 -t iso-8859-1 <in >out # vers latin-1


Bonne soirée.

;) ;)
12