Отладка QT OK, при отсутствии сигналов

вначале жалко для моего английского: -D

У меня QT 5.6 и QT Creator IDE.

Если я скомпилирую свою программу в режиме отладки, не проблема.

Если я скомпилирую в режиме освобождения, я не получаю никакого сигнала от QFTP

    FTPManager::FTPManager(QObject *parent)
    {

       m_pFTP = new QFtp(parent->parent());

       connect(m_pFTP, SIGNAL(commandFinished(int,bool)),this, SLOT(ftpCommandFinished(int,bool)));
       connect(m_pFTP, SIGNAL(stateChanged(int)),this, SLOT(ftpStateChanged(int)));
       connect(m_pFTP, SIGNAL(dataTransferProgress(qint64,qint64)),this, SLOT(updateDataTransferProgress(qint64,qint64)));
       connect(m_pFTP, SIGNAL(readyRead()),this,SLOT(readData()));
       connect(m_pFTP, SIGNAL(listInfo(QUrlInfo)), this, SLOT(GetList(QUrlInfo)));
       connect(m_pFTP, SIGNAL(commandStarted(int)),this,SLOT(ftpCommandStarted(int)));
    }



    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
        ui->setupUi(this);

        m_pRezepturVerwaltung = new RezepturVerwaltung(ui);
        m_pFTPManager = new FTPManager(this);

        connect(m_pFTPManager, SIGNAL(DownloadFinish()), m_pRezepturVerwaltung, SLOT(AktualisiereShowProgparOrdnerstruktur()));
        connect(m_pFTPManager, SIGNAL(OwndataTransferProgress(qint64,qint64)),m_pRezepturVerwaltung, SLOT(updateDataTransferProgress(qint64,qint64)));
        connect(m_pRezepturVerwaltung, SIGNAL(SignalUpload(QString, QString, QString, QString)),
        m_pFTPManager, SLOT(Upload(QString, QString, QString, QString)));
        connect(m_pRezepturVerwaltung, SIGNAL(SignalDownload(QString, QString, QString, QString)),
        m_pFTPManager, SLOT(Download(QString, QString, QString, QString)));
    }

У меня есть класс Q_Object в классе:

    class FTPManager : public QObject
    {
        Q_OBJECT
    public:
       explicit FTPManager(QObject *parent = 0);
       ~FTPManager();
       QFtp * m_pFTP;
    };

Я попытался очистить, а затем qmake.

Я удаляю файл, записывающий дыры.

РЕДАКТИРОВАТЬ:

i call void FTPManager :: downloadMehrereDateien (), если я хочу загрузить любой файл.

    void FTPManager::downloadMehrereDateien()
    {
        //Uberprufen ob es noch Dateien zu abbarbeiten gibt
        if (!m_strukDownloadFile.xAktive)
        {
            if(m_lDownloadqueue.count() > 0)
            {
                m_strukDownloadFile = m_lDownloadqueue.takeAt(0);
                m_strukDownloadFile.xAktive = true;
            }else
            {
                m_pFTP->close();
                return;
            }
        }

        if(!m_struktStatus.Connected)
        {
            connectToFtp(m_strukDownloadFile.sIP);
            m_pFTP->error();
        }else
        {
            if(!m_struktStatus.LoggedIn)
            {
                LoginToFtp();
            }else
            {
                m_pFTP->cd("StorageCard");

                m_pFTP->cd("DATA");

                int fileErweiterung = 1;
                QString sDateiUndSpeicherpfad = "", sDownlodFileName = "";


                sDateiUndSpeicherpfad = m_strukDownloadFile.sSpeicherPfad + m_strukDownloadFile.sFileName + m_strukDownloadFile.sDateiendung;
                sDownlodFileName = m_strukDownloadFile.sFileName + m_strukDownloadFile.sDateiendung;

                actionFile = new QFile(sDateiUndSpeicherpfad);
                while( actionFile->exists() )
                {
                    sDateiUndSpeicherpfad =m_strukDownloadFile.sSpeicherPfad + m_strukDownloadFile.sFileName + QString::number(fileErweiterung) + ".TAB";
                    actionFile->setFileName(sDateiUndSpeicherpfad);
                    fileErweiterung++;
                };


                if (!actionFile->open(QIODevice::WriteOnly))
                {
                    qDebug() << "Datei kann nicht geoffnet werden";
                    delete actionFile;
                    m_strukDownloadFile.xAktive = false; //ToDo: Spater mehrere versuche dann erst false
                    downloadMehrereDateien();
                }else
                {
                    m_sAktDownloadDateiName = m_strukDownloadFile.sFileName + m_strukDownloadFile.sDateiendung;
                    m_pFTP->list();
                    m_pFTP->get(sDownlodFileName, actionFile);
                    m_strukDownloadFile.xAktive = false;
                    downloadMehrereDateien();
                }
            }
        }
    }

    void FTPManager::connectToFtp(QString sServerIp)
    {
        m_pFTP->connectToHost(sServerIp, 21);

        qDebug() << "Connecting to FTP server " << sServerIp;
    }

Вывод приложения говорит: «Подключение к FTP-серверу» 172.18.16.121 «"

Edit2:

я создал новый небольшой проект с той же проблемой: https://dl.dropboxusercontent.com/u/13704266/qftptest.rar

c++,qt,signals,release,qftp,

0

Ответов: 0

Отладка QT OK, при отсутствии сигналов

вначале жалко для моего английского: -D

У меня QT 5.6 и QT Creator IDE.

Если я скомпилирую свою программу в режиме отладки, не проблема.

Если я скомпилирую в режиме освобождения, я не получаю никакого сигнала от QFTP

    FTPManager::FTPManager(QObject *parent)
    {

       m_pFTP = new QFtp(parent->parent());

       connect(m_pFTP, SIGNAL(commandFinished(int,bool)),this, SLOT(ftpCommandFinished(int,bool)));
       connect(m_pFTP, SIGNAL(stateChanged(int)),this, SLOT(ftpStateChanged(int)));
       connect(m_pFTP, SIGNAL(dataTransferProgress(qint64,qint64)),this, SLOT(updateDataTransferProgress(qint64,qint64)));
       connect(m_pFTP, SIGNAL(readyRead()),this,SLOT(readData()));
       connect(m_pFTP, SIGNAL(listInfo(QUrlInfo)), this, SLOT(GetList(QUrlInfo)));
       connect(m_pFTP, SIGNAL(commandStarted(int)),this,SLOT(ftpCommandStarted(int)));
    }



    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
        ui->setupUi(this);

        m_pRezepturVerwaltung = new RezepturVerwaltung(ui);
        m_pFTPManager = new FTPManager(this);

        connect(m_pFTPManager, SIGNAL(DownloadFinish()), m_pRezepturVerwaltung, SLOT(AktualisiereShowProgparOrdnerstruktur()));
        connect(m_pFTPManager, SIGNAL(OwndataTransferProgress(qint64,qint64)),m_pRezepturVerwaltung, SLOT(updateDataTransferProgress(qint64,qint64)));
        connect(m_pRezepturVerwaltung, SIGNAL(SignalUpload(QString, QString, QString, QString)),
        m_pFTPManager, SLOT(Upload(QString, QString, QString, QString)));
        connect(m_pRezepturVerwaltung, SIGNAL(SignalDownload(QString, QString, QString, QString)),
        m_pFTPManager, SLOT(Download(QString, QString, QString, QString)));
    }

У меня есть класс Q_Object в классе:

    class FTPManager : public QObject
    {
        Q_OBJECT
    public:
       explicit FTPManager(QObject *parent = 0);
       ~FTPManager();
       QFtp * m_pFTP;
    };

Я попытался очистить, а затем qmake.

Я удаляю файл, записывающий дыры.

РЕДАКТИРОВАТЬ:

i call void FTPManager :: downloadMehrereDateien (), если я хочу загрузить любой файл.

    void FTPManager::downloadMehrereDateien()
    {
        //Uberprufen ob es noch Dateien zu abbarbeiten gibt
        if (!m_strukDownloadFile.xAktive)
        {
            if(m_lDownloadqueue.count() > 0)
            {
                m_strukDownloadFile = m_lDownloadqueue.takeAt(0);
                m_strukDownloadFile.xAktive = true;
            }else
            {
                m_pFTP->close();
                return;
            }
        }

        if(!m_struktStatus.Connected)
        {
            connectToFtp(m_strukDownloadFile.sIP);
            m_pFTP->error();
        }else
        {
            if(!m_struktStatus.LoggedIn)
            {
                LoginToFtp();
            }else
            {
                m_pFTP->cd("StorageCard");

                m_pFTP->cd("DATA");

                int fileErweiterung = 1;
                QString sDateiUndSpeicherpfad = "", sDownlodFileName = "";


                sDateiUndSpeicherpfad = m_strukDownloadFile.sSpeicherPfad + m_strukDownloadFile.sFileName + m_strukDownloadFile.sDateiendung;
                sDownlodFileName = m_strukDownloadFile.sFileName + m_strukDownloadFile.sDateiendung;

                actionFile = new QFile(sDateiUndSpeicherpfad);
                while( actionFile->exists() )
                {
                    sDateiUndSpeicherpfad =m_strukDownloadFile.sSpeicherPfad + m_strukDownloadFile.sFileName + QString::number(fileErweiterung) + ".TAB";
                    actionFile->setFileName(sDateiUndSpeicherpfad);
                    fileErweiterung++;
                };


                if (!actionFile->open(QIODevice::WriteOnly))
                {
                    qDebug() << "Datei kann nicht geoffnet werden";
                    delete actionFile;
                    m_strukDownloadFile.xAktive = false; //ToDo: Spater mehrere versuche dann erst false
                    downloadMehrereDateien();
                }else
                {
                    m_sAktDownloadDateiName = m_strukDownloadFile.sFileName + m_strukDownloadFile.sDateiendung;
                    m_pFTP->list();
                    m_pFTP->get(sDownlodFileName, actionFile);
                    m_strukDownloadFile.xAktive = false;
                    downloadMehrereDateien();
                }
            }
        }
    }

    void FTPManager::connectToFtp(QString sServerIp)
    {
        m_pFTP->connectToHost(sServerIp, 21);

        qDebug() << "Connecting to FTP server " << sServerIp;
    }

Вывод приложения говорит: «Подключение к FTP-серверу» 172.18.16.121 «"

Edit2:

я создал новый небольшой проект с той же проблемой: https://dl.dropboxusercontent.com/u/13704266/qftptest.rar

00C ++, Qt, сигналы, выпуск, QFtp,
Похожие вопросы