Russian Qt Forum
Ноябрь 25, 2024, 02:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qftp клиент  (Прочитано 3309 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Ноябрь 12, 2015, 13:27 »

набросал проект на скорую руку но почему то сигналы и слоты не обрабатываются
решил начать как бы пробы c qftp создал небольшой проект но сигналы не ловятся
консольное приложение
main.cpp
Код
C++ (Qt)
#include <QCoreApplication>
#include <myftp.h>
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   myftp ftp;
   return a.exec();
}
 

myftp.h
Код
C++ (Qt)
#ifndef MYFTP_H
#define MYFTP_H
 
#include <QObject>
#include <QFtp>
#include <QUrlInfo>
#include <iostream>
 
class myftp : public QObject
{
   Q_OBJECT
public:
   explicit myftp(QObject *parent = 0);
   QFtp a;
 
signals:
 
public slots:
   void con();
   void poluchob(QUrlInfo);  //ÐÏÌÕÞÅÎÉÅ ÆÁÊÌÁ ÉÌÉÐÁÐËÉ ÎÁÈÏÄÑÝÉÓÑ × ÚÁÄÁÎÎÏÊ ÄÉÒÅËÔÏÒÉÉ
   void poluchif(int);
   void kk(int,bool);
 
 
 
};
 
#endif // MYFTP_H
 

myftp.cpp

Код
C++ (Qt)
#include "myftp.h"
 
myftp::myftp(QObject *parent) :
   QObject(parent)
{
//ËÏÎÓÔÒÕËÔÏÒ
   con();
}
 
//ËÏÎÎÅËÔ Ë ÓÅÒ×ÅÒÕ
 
void myftp::con()
{
   QFtp ftp;
   connect(&ftp,SIGNAL(stateChanged(int)),this,SLOT(poluchif(int)));
   connect(&ftp,SIGNAL(commandStarted(int)),this,SLOT(poluchif(int)));
   connect(&ftp,SIGNAL(commandFinished(int,bool)),this,SLOT(kk(int,bool)));
   connect(&ftp,SIGNAL(listInfo(QUrlInfo)),this,SLOT(poluchob(QUrlInfo)));
   ftp.connectToHost(QString("10.4.13.65"),21);
   ftp.login(QString("root"),QString("12345678"));
   ftp.cd("manag");
   ftp.list();
 
}
 
void myftp::poluchob(QUrlInfo url)
{
   std::cout<<QString(url.name()).toStdString()<<std::endl;
}
 
void myftp::poluchif(int r)
{
   std::cout<<QString(r).toStdString()<<std::endl;
}
 
void myftp::kk(int a,bool ok)
{
   //std::cout<<QString(url.name()).toStdString()<<std::endl;
}

проблема в том что не испускается ни один сигнал(не выполняется ни один слот) в чем может быть проблема....
делаю в линуксе...

может быть я не правильно использую сигнально слотовую систему в консольном приложении??
в чем может быть проблема?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Ноябрь 12, 2015, 13:35 »

Вы объявили член класса a, а конекты делаете с локальным объектом ftp.
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Ноябрь 12, 2015, 13:38 »

подскажите как исправить а тоя совсем не догоняю....
я объявил объект класса... 
Код
C++ (Qt)
myftp ftp;
выполнился конструктор
Код
C++ (Qt)
myftp::myftp(QObject *parent) :
   QObject(parent)
{
 
   con();
}

далее выполнился метод
Код
C++ (Qt)
void myftp::con()
{
   QFtp ftp;
   connect(&ftp,SIGNAL(stateChanged(int)),this,SLOT(poluchif(int)));
   connect(&ftp,SIGNAL(commandStarted(int)),this,SLOT(poluchif(int)));
   connect(&ftp,SIGNAL(commandFinished(int,bool)),this,SLOT(kk(int,bool)));
   connect(&ftp,SIGNAL(listInfo(QUrlInfo)),this,SLOT(poluchob(QUrlInfo)));
   ftp.connectToHost(QString("10.4.13.65"),21);
   ftp.login(QString("root"),QString("12345678"));
   ftp.cd("manag");
   ftp.list();
 
}
в нем создался объект qftp и к нему я пишу сигналы слоты что я делаю не так??
« Последнее редактирование: Ноябрь 12, 2015, 13:41 от koldun90 » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Ноябрь 12, 2015, 13:39 »

подскажите как исправить а тоя совсем не догоняю....
Все действия выполнять с членом класса a.
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #4 : Ноябрь 12, 2015, 13:53 »

я понял коннекты можно прописывать только к объектам которые объявлены в классе который я вызываю из
main.cpp?
и поскольку QFtp a является членом класса myftp я и могу делать коннект....
я правильно рассуждаю?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Ноябрь 12, 2015, 13:55 »

я понял коннекты можно прописывать только к объектам которые объявлены в классе который я вызываю из
main.cpp?
и поскольку QFtp a является членом класса myftp я и могу делать коннект....
я правильно рассуждаю?
Можно конектится и к локальным объектам, только они разрушаются при выходе из функции и конекты разрываются.
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Ноябрь 13, 2015, 10:55 »

появилась проблема не скачивает файл с помощью QFtp::get не пойму в чем проблема...
файл создается но в него ничего не пишется
вот код

main.cpp
Код
C++ (Qt)
#include <QCoreApplication>
#include <myftp.h>
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   myftp ftp;
   ftp.connectserver();  //конекчусь к серверу
   ftp.poluc(QString(""));  //
   return a.exec();
}

myftp.h
Код
C++ (Qt)
#ifndef MYFTP_H
#define MYFTP_H
 
#include <QObject>
#include <QFtp>
#include <QUrlInfo>
#include <iostream>
#include <QFileInfo>
#include <QDir>
 
class myftp : public QObject
{
   Q_OBJECT
public:
   explicit myftp(QObject *parent = 0);
   QFtp a;
   QString ipadreess;
   QString port;
   QString login;
   QString parol;
   QString papka;
signals:
 
public slots:
   void connectserver(); // ÐÏÄËÌÀÞÅÎÉÅ Ë ÓÅÒ×ÅÒÕ
   void poluc(QString);
   void setip(QString);
   void loginparol(QString,QString);
   void poluchob(QUrlInfo);  //ÐÏÌÕÞÅÎÉÅ ÆÁÊÌÁ ÉÌÉÐÁÐËÉ ÎÁÈÏÄÑÝÉÓÑ × ÚÁÄÁÎÎÏÊ ÄÉÒÅËÔÏÒÉÉ
   void poluchif(int);
   void ustanpapka(QString);
   void kk(int,bool);
 
 
 
};
 
#endif // MYFTP_H
myftp.cpp


Код
C++ (Qt)
#include "myftp.h"
myftp::myftp(QObject *parent) :
   QObject(parent)
{
connect(&a,SIGNAL(listInfo(QUrlInfo)),this,SLOT(poluchob(QUrlInfo)));
}
 
//ÐÏÄËÌÀÞÅÎÉÅ Ë ÓÅÒ×ÅÒÕ ÐÅÒÅÄÁÅÍ
//ÉÐ ÁÄÒÅÓ É ÐÏÒÔ
//ÌÏÇÉÎ É ÐÁÒÏÌØ
void myftp::connectserver()
{
    std::cout<<"ÚÁÛÅÌ × ËÏÎÎÅËÔ="<<std::endl;
   a.connectToHost(QString("10.4.13.65"));
   a.login(QString("root"),QString("12345678"));
 
 
}
void myftp::poluc(QString ppka)
{
    std::cout<<"ÚÁÛÅÌ × ÐÏÌÕÞ="<<std::endl;
   a.cd(QString("ttt")); //ÐÅÒÅÈÏÄÉÍ × ÐÁÐËÕ ËÏÔÏÒÕÀ ÎÕÖÎÏ ÓËÏÐÉÒÏ×ÁÔØ
 
   a.list();  //ÐÏÌÕÞÁÅÍ ÓÐÉÓÏË ÏÂßÅËÔÏ×(ÆÁÊÌÏ× É ÐÁÐÏË) ÎÁÈÏÄÑÝÉÈÓÑ × ÄÁÎÎÏÊ ÐÁÐËÅ
 
  // std::cout<<ppka.toStdString()<<std::endl;
 
}
 
//ÐÏÌÕÞÁÅÍ ÉÍÑ ËÁÖÄÏÇÏ ÆÁÊÌÁ × ÐÁÐËÅ
void myftp::poluchob(QUrlInfo url)
{
 
 
 QString fail=url.name();
 std::cout<<"æÁÊÌ × ËÏÔÏÒÙÊ ÓËÁÞÉ×ÁÅÍ="<<QString(url.name()).toStdString()<<std::endl;
 QString outfail="/papkatest/"+url.name();
 std::cout<<"æÁÊÌ ÐÒÉÅÍÎÉË="+outfail.toStdString()<<std::endl;
 QFile g(outfail);
 if (g.open(QIODevice::WriteOnly))  // ÏÔËÒÙ×ÁÅÍ ÆÁÊÌ ÄÌÑÚÁÐÉÓÉÎÁ ÓÔÏÒÏÎÅ ËÌÉÅÎÔÁ
 {
    // std::cout<<"òÅÚÕÌØÔÁÔ="<<rez<<std::endl;
    // a.state();
     std::cout<<"óÏÓÔÏÑÎÉÅ="<<a.state()<<std::endl;
     int rez=a.get(fail,&g,QFtp::Binary);
     std::cout<<"òÅÚÕÌØÔÁÔ="<<rez<<std::endl;
 }
 //a.close();
 g.close();
 
}
 
void myftp::poluchif(int r)
{
   std::cout<<QString(r).toStdString()<<std::endl;
}
 
void myftp::kk(int a,bool ok)
{
 
}
 
void myftp::setip(QString ip)
{
   ipadreess=ip;
}
 
//ÕÓÔÁÎÁ×ÌÉ×ÁÅÍ ÉÐ ÁÄÒÅÓ É ÐÁÒÏÌØ
void myftp::loginparol(QString log,QString par)
{
   login=log;
   parol=par;
}
 
//ÕÓÔÁÎÁ×ÌÉ×ÁÅÍ ÐÁÐËÕ × ËÏÔÏÒÕÀ ÍÙ ÓËÏÐÉÒÕÅÍ ÆÁÊÌÙ
void myftp::ustanpapka(QString p)
{
   papka=p;
}
 
 
не пойму в чем дело...

« Последнее редактирование: Ноябрь 13, 2015, 11:38 от koldun90 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.221 секунд. Запросов: 22.