Revue de sujet
Darktib Posté le 21 Fév 2010 à 15:16
Avatar de Darktib
Messages : 4017
Oblige de mettre des coordonnees absolues ? Comment c'est possible ?

Dans ce cas... il faudrait reimplementer la fonction de resize (resizeEvent) et calculer manuellement toutes les coordonnees pour replacer les widgets - en somme, ca consisterait a faire manuellement le boulot des layouts
graphiboc Posté le 20 Fév 2010 à 10:43
Messages : 262
Pour les coordonnées absolues, je sus obligé, c'est vraiment la nature de l'application qui me force à faire ça.
je sais comment marche les layout, mais ici ça mettrait le bazard dans tout le logiciel...
Sinon pour le bureau étendu ?
Darktib Posté le 19 Fév 2010 à 22:55
Avatar de Darktib
Messages : 4017
En général spécifier les coordonnées absolues est une mauvaise solution. Avec Qt, utilises plutot les Layout, ca te facilitera la vie, et tu pourra adapter ton application avec n'importe quelle résolution.

Pour les layout, cherche:

QLayout (classe abstraite)
A utiliser directement : QVBoxLayout / QHBoxLayout / QGridLayout
Pour voir ce que ca donne, tu peux utiliser QDesigner
graphiboc Posté le 19 Fév 2010 à 11:53
Messages : 262
Salut à tous, je poste ici car c'est dans la continuité du projet.
Il se trouve que la SNCF veut en fait utiliser le logiciel sur un bureau étendu (très très étendu même).
Le problème c'est que la nature de l'application m'oblige à spécifier les coordonnées de chaque élément de manière absolue (en gros je dis tel bouton se met à tel coordonnée de l'écran).

Est-ce que quelqu'un sait comment gérer un bureau étendu dans ce cas là ?
Je veux dire par là, comment afficher mon bouton par exemple à une coordonnée définie non pas de l'écran principal mais d'un écran secondaire ?
Je ne dispose pas de bureau étendu pour pouvoir tester chez moi malheureusement.
Est-ce qu'il suffit de décaler toutes les coordonnées ? Par exemple afficher un bouton décalé horizontalement de -1000 l'affichera sur le second bureau de gauche ?

merci d'avance pour vos réponses
graphiboc Posté le 08 Déc 2009 à 17:55
Messages : 262
Tous mes problèmes sont résolus :)
Pour QFtp, c'est ma faute : j'avais oublié que c'était asynchrone, donc je faisais file->close() directement aprè sla commande ftp->get() alors que celle-ci n'était pas terminée.
Ce coté asynchrone est à la fois extrêmement puissant, mais aussi chiant quand on veut un truc simple
Darktib Posté le 06 Déc 2009 à 19:45
Avatar de Darktib
Messages : 4017
Je n'ai jamais vraiment utilisé le module ftp de Qt, par contre il me semble que Gregouar l'utilise dans le launcher de Holyspirit, je pense qu'il saura t'aider sur ce point.
graphiboc Posté le 06 Déc 2009 à 17:56
Messages : 262
Ok.
Cependant je garde toujours un problème : je n'arrive pas à récupérer un fichier depuis un FTP.
Le problème c'est que comme je n'ai pas beaucoup de temps devant moi, je n'ai pas le temps de lire en détail la doc sur Qt.
Du coup je vois mal comment vérifier par exemple que la commande de conection a bien fonctionné, etc...
Darktib Posté le 06 Déc 2009 à 17:30
Avatar de Darktib
Messages : 4017
Dsl pour le retard, en tout cas tu as trouvé tout seul :grin: . En effet, il faut activer manuellement les modules de Qt, pour des raisons de performance (de compilation) et de place.
graphiboc Posté le 06 Déc 2009 à 13:56
Messages : 262
Merci pour vos réponses rapides

@Melysoph : la commande Code :
ftp = new QFtp(this)
seule me donne l'erreur Code :
error: undefined reference to `_imp___ZN4QFtpC1EP7QObject'

Donc je ne pense pas que le problème vienne de là

@Darktib : le fichier pro ne mentionne que les ressources (.h,.cpp et .ui) mais aucune librairie.
Pourtant, j'utilise par exemple la librairie QTimer qui fonctionne sans problème.
Voilà tout de même le fichier :

Code :
#-------------------------------------------------
#
# Project created by QtCreator 2009-12-05T14:43:13
#
#-------------------------------------------------

TARGET = part
TEMPLATE = app


SOURCES += main.cpp
        part.cpp

HEADERS  += part.h

FORMS    += part.ui



EDIT :
cet exemple là, trouvé sur internet me fait les mêmes erreurs :
Code :
#include <QApplication>
#include <QFile>
#include <QtNetwork/QFtp>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv, false);
    QFtp ftp;

    QObject::connect(&ftp, SIGNAL(done(bool)), &app, SLOT(quit()));

    QFile file("INSTALL");

    ftp.connectToHost("ftp.trolltech.com");
    ftp.login();
    ftp.cd("qt");
    ftp.get("INSTALL", &file);
    ftp.close();

    return app.exec();
}


C'est à s'arracher les cheveux...

EDIT2:
je viens de reconfigurer Qt Creator en statique pour régler le prolbème des dlls sauf que :
- ça ne marche pas (ça compile, mais j'ai toujours besoin d'inclure toutes les dlls)
- c'est 10 fois plus long pour compiler
- j'obtiens maintenant des erreurs du type
Code :
error: undefined reference to `QFtp::QFtp(QObject*)'

avec la commande de création d'un FTP

EDIT3 : c'est bon je me suis débarassé du problème des dll.
Il ne reste plus que celui du FTP qui est malheureusement particulièrement pénible.
Apparemment il ne trouve pas le constructeur d'un object de type QFtp ???

EDIT4 : finalement je viens de régler le problème du Ftp.
Le pire c'est que c'est tout con, mais ce n'est pas expliqué clairement dans l'aide de Qt !
il suffit de rajouter cette ligne dans le .pro :
Code :
QT += network

+1 pour Darktib sur l'idée...
Melysoph Posté le 06 Déc 2009 à 13:18
Avatar de Melysoph
Messages : 67
De base je dirais que ta méthode "connectToHost" n'as pas le même prototype ici et dans le .h

Essaye ftp->connectToHost(QString::FromStdString("mon_host"));
Darktib Posté le 06 Déc 2009 à 13:15
Avatar de Darktib
Messages : 4017
Peut tu nous montrer le fichier pro stp? Normalement, il faut rajouter le nom du module dans la configuration de compilation.
graphiboc Posté le 06 Déc 2009 à 12:49
Messages : 262
C'est encore moi.
J'en suis aux test FTP et j'ai quelques soucis.
si je rajoute ça dans mon main :
Code :
#include <QtNetwork/QFtp>

int main()
{
...
QFtp * ftp = new QFtp();
ftp->connectToHost("mon_host");
ftp->login("utilisateur","password");
...
}


j'obtiens à la compilation ce genre d'erreur :
Code :
error: undefined reference to `_imp___ZN4QFtp13connectToHostERK7QStringt'


vous savez comment régler ce problème ?
graphiboc Posté le 05 Déc 2009 à 18:28
Messages : 262
oui ! :tongue:
bon le coup de l aconfiguration a tout fait planter je vais refaire un 2e test.
Pendant ce temps j'ai résolu le problème pour garder la fenêtre au premier plan.
Je l'avais fait via un QTimer mais la fenêtre clignotait.
En réalité on peut le paramètrer directement.
Il ne me reste plus qu'à régler le problème des dlls, m'interresser au ftp et le reste devrait aller tout seul.

Merci beaucoup !

Je vous tiens au courant
Darktib Posté le 05 Déc 2009 à 17:57
Avatar de Darktib
Messages : 4017
Rien que ça!
graphiboc Posté le 05 Déc 2009 à 17:38
Messages : 262
nan le problème c'est que avec Qt Creator il inclue toutes les dlls, même en release.
Je suis en train de le reconfigurer manuellement via l'invite de commande de Qt et ça devrait marcher.
J'ai bien avancé sur ma prise en main, je pense qu'effectivement si je n'ai pas de soucis côté ftp le programme sera fini dans la semaine.

Merci beaucoup pour votre aide en tout cas !

Ps : c'est vrai que c'est un de mes gros défauts : je sais très bien utiliser DBP (j'arrive à programmer ce que je veux avec) mais ce n'est pas un langage très utile dans le milieu professionel, or le projet sur lequel je suis en ce moment est commandité par la SNCF.
Darktib Posté le 05 Déc 2009 à 16:37
Avatar de Darktib
Messages : 4017
Ouarf, envoyer un vétéran de dbp sur ce lien... enfin, il faut un début à tout ->[]

Sinon, pour effectuer une action, tu as la classe QTimer, au nom très explicite. Il suffit de le démarrer en lui indiquant le temps (en ms) entre deux activations. Tout ca utilise les signaux et slots, avant de pouvoir faire quelque chose il faut que tu comprenne bien comment ca fonctionne.

Pour QtCreator, il est possible d'utiliser d'autres librairies, tout ce que tu veux, mais il y a des subtilités. Si par exemple, tu utilise une lib dans laquelle certaines fonctions ont pour nom 'emit' ou 'slots', ca va planter à la compil. Dans ce cas, il faut changer le fichier pro, et changer deux trois petits trucs. Si jamais tu veux plus d'infos, demande-le moi.

Enfin, pour les dlls manquantes, il s'agit de:
QtGui4.dll
QtCore4.dll
mingwm10.dll
?? (ou avec les d juste avant le .dll si c'est du débug)

Normalement ca ne devrait pas etre aussi lourd, chez moi meme avec les versions débug, ca prend moins de 20 Mo...
Au pire, n'utilise que les release
Melysoph Posté le 05 Déc 2009 à 16:25
Avatar de Melysoph
Messages : 67
Désolé de t'envoyer vers ce lien mais... http://www.siteduzero.com/tutoriel-3-11406-apprenez-a-programmer-en-c.html
Il y a une grosse partie Qt.
graphiboc Posté le 05 Déc 2009 à 15:01
Messages : 262
au niveau de la compilation, au début tout se passe ben, et puis il y a un certains nombre de fichiers non trouvés, mais je ne me rappelle plus lesquels, je regarderai ça dès que j'aurais du temps à perdre.
Pour le moment je me concentre donc juste sur Qt Creator.
J'ai cependant une question : lorsque je compile, si je veux éxécuter mon projet, il me dit que telle dll est manquante, etc.
La solution que j'ai toruvé c'es de copier toutes les dll dans le même dossier.
Seul problème, ca fait environ 700Mo, ce serait un peu ridicule pour un si petit programme de prendre autant de place.
Une solution à cela? C'est sûrement juste un problème de paramètrage.
Encore merci pour votre aide précieuse

sinon, je susi un peu perdu : Qt Creator permet de compiler du C (donc je peux utiliser n'importe qu'ele autre librairie ?) ?

EDIT : maintenant je me trouve face à un problème : il se trouve que dans Qt Creator, le programme principal ressemble à ça :

Code :
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    AdressBook w;
    w.show();
    return a.exec();
}


le problème c'est que la boucle principale se trouve dans l'instruction a.exec() !
Du coup, comment faire en sorte que mon programme effectue une action à chaque boucle ? (par exemple, je voudrais ajouter dans la boucle hide() puis show() pour garder la fenêtre au 1er plan). Désolé pour mon incompétence :grin:
Melysoph Posté le 05 Déc 2009 à 14:39
Avatar de Melysoph
Messages : 67
Ah ah ah, moi aussi j'ai dû passer pas la re-compilation de Qt avec visual. La bonne blague ! J'espère vraiment que ce n'est pas un procédé obligatoire...
Mais sinon ça marche très bien après ça, pas de problème de versions ou de génération de makefile, etc...

Si tu veux utiliser l'API windows - je ne sais pas comment ça se passe avec DBPro - mais c'est une question de C/C++, sans grand rapport avec Qt.
Qt t'offre des raccourcis pour certains fonctionnalités, mais ça reste toi qui code. Si DBPro te donne directement la fonction Windows, plus qu'à la réutiliser.
Sinon tu peux aller voir ce lien, ce gars a trouvé une façon de faire avec les processus :
http://forum.hardware.fr/hfr/Programmation/C-2/tester-programme-resolu-sujet_15532_1.htm

Je ne saurais te dire qu'elle est la meilleure méthode... Tu devrais appeler le support Microsoft Windows pour savoir. :D

EDIT :
Quelle est ton problème de compilation ? Il ne trouve pas les includes du genre windows.h ? (un pote a eu ce problème)

Je pense que QTCreator suffirait oui - Il a la vocation d'être un IDE quand même à la base.
Je n'aime pas trop, mais il devrait pouvoir te fournir les outils nécessaire.


A bientôt,
Melysoph
graphiboc Posté le 05 Déc 2009 à 13:07
Messages : 262
trop tard je suis déjà en train de le configurer pour visual studio et apparemment c'est parti pour 4h de compilation...
J'espère faire les premières découvertes de Qt ce soir.
Et du coup si tout se passe bien j'espère avoir les premiers vrais résultat dans la semaine.
Je pense que le programme en lui-même est assez simple, mais là il y a une énorme part de prise en main (comme je l'ai dit je n'ai utilisé vs que en mode invite de commande, et je ne sais encore rien sur Qt).

Sinon, simple question : peut-on faire en sorte qu'un programme se ferme si un autre programme n'est pas lancé ?
Je sais que la réponse est oui (et j'ai déjà fait ca en DBP via l'api de windows), mais via Qt et vs, quelle serait la meilleure méthode ?

Merci

EDIT : au final j'ai eu une erreur pendant la compilation, je vais donc étudier tes propositions.
Juste : est ce QtCreator suffirait à faire ce que je cherche à faire ?
Qu'est ce que tu veux dire par "Code:blocks et la ligne de commande" ?
Nouveau message

Large sourire Sourire Veut Langue Absurde Choqué Clin d'oeil Innocent Cool Fier rougissant confus Neutre Etonné Content Triste Douloureux Pathétique Etrange Agacé Colère Tordu Flèche Question Exclamation Rigole Gêné Amoureux Oui No Fou Pleure Pleure de joie Mignon Coup de coeur Hystérique Blasé Ninja Pouffe Stun Suspicieux Incompréhensible
Gras
Italique
Souligné
Barré
Gauche
Centré
Droite
Justifié
Flottant à gauche
Flottant à droite
Lien
Citation
Puce
Spoiler
Wiki
Image
Flash
Youtube


Prévisualisation
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0403 secondes