Votre question

C++ gestion ftp avec Qt.

Tags :
  • Time
  • Programmation
Dernière réponse : dans Programmation
20 Juin 2009 01:37:53

Bonjour a tous,

Voila j'essaye de recupéré l'arborescence de mon ftp via une application C++ realisé avec Qt.
J'ai commencé mon code mais j'ai un probléme de signal que je ne parvient pas resoudre.
Voici mon code (juste la partie interessente) :

  1. fileList = new QTreeWidget; //Je fais mon QTreeWidget
  2. fileList->setEnabled(false);
  3. fileList->setRootIsDecorated(false);
  4. fileList->setHeaderLabels(QStringList() << tr("Name") << tr("Size") << tr("Owner") << tr("Group") << tr("Time"));
  5. fileList->header()->setStretchLastSection(false);
  6.  
  7. QWidget *widget = new QWidget;
  8. QGridLayout layout_1 = new QGridLayout;
  9. layout_1->addWidget(fileList, 3, 0); //Je place mon QTreeWidget dans ma fenêtre via un layout
  10. widget->setLayout(layout_1);
  11.  
  12. connect(ftp, SIGNAL(commandFinished(int, bool)), this, SLOT(commandefini(int, bool)));
  13. connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(arbo(QUrlInfo))); //connexion des signaux avec les slots...
  14. connect(connexion,SIGNAL(clicked()),qApp,SLOT(connect1()));
  15.  
  16. void fenetre::connect1()
  17. {
  18.  
  19. ftp->connectToHost(ftptext->text(), portnum->value());
  20. ftp->login(utilisateurtext->text(), mdptext->text());
  21.  
  22. }
  23.  
  24. void fenetre::commandefini(int i, bool i2)
  25. {
  26. if (ftp->currentCommand() == 3) //Une fois que connectToHost se termine, je lance ftp->list();
  27. {
  28. if (i2)
  29. {
  30. ftp->close();
  31. }
  32. else
  33. {
  34. int id = ftp->list();
  35. qDebug()<< id << ftp->state();
  36. }
  37. }
  38.  
  39. if (ftp->currentCommand() == 4)
  40. {
  41. }
  42. }
  43.  
  44. void fenetre::arbo(const QUrlInfo &arbo1)
  45. {
  46. qDebug()<<"arbo : "<< arbo1.name();
  47.  
  48. QTreeWidgetItem *item = new QTreeWidgetItem;
  49. item->setText(0, arbo1.name());
  50. item->setText(1, QString::number(arbo1.size()));
  51. item->setText(2, arbo1.owner());
  52. item->setText(3, arbo1.group());
  53. item->setText(4, arbo1.lastModified().toString("MMM dd yyyy"));
  54.  
  55. isDirectory[arbo1.name()] = arbo1.isDir();
  56. fileList->addTopLevelItem(item);
  57. if (!fileList->currentItem())
  58. {
  59. fileList->setCurrentItem(fileList->topLevelItem(0));
  60. fileList->setEnabled(true);
  61. }
  62.  
  63. }



Mais j'obtient ceci apres comme valeur a la ligne : qDebug()<< id << ftp->state();

Starting C:/jéjé/jeje/projet/Net Developpe/release/Net Developpe.exe...
3 3

Mon slot arbo n'est donc pas appelé...

id vaut 3 or il devrait valoir 6, valeur de ftp->list(); et non 3 la valeur de ftp->connectToHost();
Cela a donc pour effet de ne pas lancé mon slot arbo...

Cordialement,

Autres pages sur : gestion ftp

a b L Programmation
20 Juin 2009 10:48:13

Dans la doc, il est écrit que list est asynchrone, c'est-à-dire que lorsque tu retournes de list, la commande n'est pas encore exécutée. Donc, ça me parait normal que tu n'ais pas 6 à la sortie de la méthode list().
Tu devrais mettre des slot sur CommandStarted et CommandFinished, pour voir si les commandes sont déclenchée et terminée (pas seulement pour list)
m
0
l
Contenus similaires
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS