Qt4 C++ Linux

Fermé
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 - 1 déc. 2007 à 15:35
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 - 9 déc. 2007 à 10:57
Bonjour,

J'essaie de reproduire des exemples données sur la programmation parallèle avec Qt4.
C'est codé en C++ en utilisant la bibliothèque Qt4 pour l'exécution de tâches parallèles.
Enfin l'exemple utilisé est celui du calcul d'une image fractale.

je découvre à peine Qt et j'ai quelques vagues connaissances en C++. je sais bien que les exemples ne sont pas les plus simples mais je souhaiterai juste savoir si cela fonctionne chez d'autres.

les sources sont ici : http://kafka.fr.free.fr/articles/qt4_09-sources.tar.bz2

1) comment expliquer mes résultats suivants:
d'après ce que j'ai compris les deux premiers exemples montrent le gain en rapidité entre l'exemple 1 (sans calcul parallèle) et l'exemple 2 (avec calcul parallèle).
voici ce que j'ai sur la Mandriva :
[bob 13] fract_1 > ./fract_1 -w 2048 -h 1536
43.864

[bob 16] fract_2 > ./fract_2 -w 2048 -h 1536 -t 4
43.508

les mêmes commandes dans l'article donnent 37.572 et 28.273 respectivement.
L'utilisation de 4 threads permet un gain appréciable dans l'article mais pas chez moi !
Est-il possible de vérifier si les scripts fonctionnent de façon correcte ?


2) pour le 3ème exemple avec ajout de l'interface graphique permettant d'afficher l'avancement du calcul ...
je n'arrive pas à compiler et cela donne ceci chez moi :

[bob 23] fract_3 > /usr/lib/qt4/bin/qmake -project
[bob 24] fract_3 > /usr/lib/qt4/bin/qmake
[bob 25] fract_3 > make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/lib/qt4/include/QtCore -I/usr/lib/qt4/include/QtGui -I/usr/lib/qt4/include -I. -I. -I. -o fractal_images.o fractal_images.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/lib/qt4/include/QtCore -I/usr/lib/qt4/include/QtGui -I/usr/lib/qt4/include -I. -I. -I. -o fractal_viewer.o fractal_viewer.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/lib/qt4/include/QtCore -I/usr/lib/qt4/include/QtGui -I/usr/lib/qt4/include -I. -I. -I. -o main.o main.cpp
main.cpp: In member function ‘void Main::threadFinished()’:
main.cpp:159: warning: comparison between signed and unsigned integer expressions
main.cpp:163: error: ‘class QMessageBox’ has no member named ‘addButton’
main.cpp: At global scope:
main.cpp:171: error: redefinition of ‘struct QMetaTypeId<unsigned int>’
/usr/lib/qt4/include/QtCore/qmetatype.h:176: error: previous definition of ‘struct QMetaTypeId<unsigned int>’
make: *** [main.o] Erreur 1
[bob 26] fract_3 >

ici aussi la partie incriminée n'est pas mentionnée dans l'article et le script est très costaud pour moi !

merci.

:-))
A voir également:

6 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
1 déc. 2007 à 16:19
Salut,

les messages sont très clairs :

main.cpp: In member function ‘void Main::threadFinished()’:
main.cpp:159: warning: comparison between signed and unsigned integer expressions
main.cpp:163: error: ‘class QMessageBox’ has no member named ‘addButton’
main.cpp: At global scope:
main.cpp:171: error: redefinition of ‘struct QMetaTypeId<unsigned int>’
/usr/lib/qt4/include/QtCore/qmetatype.h:176: error: previous definition of ‘struct QMetaTypeId<unsigned int>’ 


Dans la fonction threadFinished(), à la ligne 159, tu compares un entier signé et un non signé (warning).
A la ligne 163, tu utilises un membre nommé addButton, mais il en existe pas dans QMessageBox.
A la ligne 171, tu redéfinis la structure QMetaTypedId.

Voilà, http://doc.trolltech.com/ sur ce site, tu trouveras les réponses si tu sèches ;)
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473
1 déc. 2007 à 16:43
merci pour ta réponse !

comme je l'ai dit je connais rien à Qt !
en fait comme j'utilise la version qt 4.1 et ne sachant pas quelle version est utilisée dans l'article, l'idée de savoir si mes messages d'erreur sont dû à un problème de version de Qt4 m'éviterait de chercher dans la mauvaise direction.

je vais essayer de regarder ça d'un peu plus près ! d'autre part j'ai également posté sur le forum Qt-fr.

:-))
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473
1 déc. 2007 à 18:28
concernant : main.cpp:171: error: redefinition of ‘struct QMetaTypeId<unsigned int>’

l'article mentionne un petit topo sur sur les signaux et threads et il est question de référencer le type unsigned dans une macro :
Q_DECLARE8METATYPE(unsigned) 

et d'ajouter une instruction correspondante :
qregisterMetatype<unsigned>("unsigned");


et je suppose comme il l'est dit qu'il faut remplacer unsigned par mon propre type. (......et là je comprend rien à ce qu'on me dit !).

pour le reste je sais pas car la portion de code du fichier main.cpp correspondante aux erreurs est justement absente dans l'article.

et ça m'ennuie de me lancer dans l'install de Qt4 à partir des sources ...

:-))
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473
1 déc. 2007 à 19:29
Finalement je pense avoir mes réponses d'après ceci :

void QMessageBox::addButton ( QAbstractButton * button, ButtonRole role )

Adds the given button to the message box with the specified role.

This function was introduced in Qt 4.2.


source : http://doc.trolltech.com/4.2/qmessagebox.html#addButton

concernant fract_3 et pour le reste des erreurs cela doit probablement passer sans souci avec Qt-4.2

concernant les temps obtenus avec fract_1 et fract_2, je suppose que mon très très vieux processeur n'est pas en mesure de faire ce genre d'exercice.

merci à ceux qui m'ont lu.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473
3 déc. 2007 à 21:59
Bonjour,

Je confirme :

après installation de Qt-4.3.2 à partir des sources sur la Mandriva, je n'obtiens plus de message d'erreur à la compile de l'exemple fract_3.

...enfin juste un petit détail que je n'ai toujours pas réglé ....ceci :

main.cpp: In member function ‘void Main::threadFinished()’:
main.cpp:159: warning: comparison between signed and unsigned integer expressions


obtenu à la compile de fract_3 (voir également post<3>) mais n'empêche pas le programme fract_3 de se lancer correctement.

si quelqu'un peut m'aider à comprendre ce que signifie remplacer unsigned par mon propre type !

merci.

:-))
0
c'est un avertissement pour une comparaison signé / non signé qui peut donner des résultats incorrects pour certaines valeurs.
Ex pour un entier sur 1 octet:
signed char: valeurs possibles de -128 à +127
unsigned char: valeurs possibles de 0 à 255
Si tu compare dans la plage de valeurs commune (0 à +127) tout va bien, mais si tu compare des valeurs hors de cette plage tu va avoir des surprises... dans ton cas on peut supposer que ça ne gêne pas l'exécution du code, mais le compilateur te préviens du risque.

Ex de résultat indésirable:

signed char v1 = -1;
unsigned char v2 = 128;

if(v1==v2) {
printf ("-1 = 128 !!!");
}
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473
9 déc. 2007 à 10:57
merci pour ta réponse !

dans ton cas on peut supposer que ça ne gêne pas l'exécution du code
ça ne semble pas géné en effet ! j'obtiens bien l'ouverture d'une fenêtre affichant l'avancement du calcul de l'image fractale.

néanmoins je vais regarder de plus près ton exemple (bien plus simple) pour comprendre ce message d'erreur.

encore merci.

:-))
0