[Qt] komunikat "collect2: ld returned 1 exit status" - QUrl


(eureka 170) #1

Próbuję napisać klienta FTP ( na razie wersja nieskończona), jednak podczas pisania napotkałem pewien problem. oto kod:

ftp2.h

#ifndef FTP2_H

#define FTP2_H

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

class MyWindow: public QWidget

{

    Q_OBJECT;

public:

    MyWindow();

    ~MyWindow() {}

    void SetupUi(QWidget *Form);

protected slots:

    void Connect ();

    void Disconnect ();

    void GetFile ();

    void CancelGetFile ();

    void ProcessItem (QTreeWidgetItem *item, int column);

    void CdUp();

    void Quit ();

    void ftpCommandFinished (int id, bool error);

    void ftpListInfo (const QUrlInfo & urlInfo);

    void ftpDataTransferProgress (qint64 done, qint64 total);

private:

    QGridLayout *gridLayout;

    QLabel *labelFTP;

    QLineEdit *lineEdit;

    QTreeWidget *treeWidget;

    QPushButton *pushButtonConnect;

    QPushButton *pushButtonDisconnect;

    QPushButton *pushButtonCdUp;

    QPushButton *pushButtonGet;

    QFrame *line;

    QPushButton *pushButtonQuit;


    QFtp *ftp;

    QFile *file;

    QProgressDialog *progressDialog;

};

#endif // FTP2_H

ftp2.cpp

#include 

//#include 

MyWindow::MyWindow() : QWidget()

{

    setGeometry(200,200,300,500);

    SetupUi(this);


    ftp = NULL;

    progressDialog = new QProgressDialog (this);

    progressDialog->setWindowTitle("Pobieranie pliku");


    connect (pushButtonConnect, SIGNAL(clicked()),this,SLOT(Connect()));

    connect (lineEdit, SIGNAL(returnPressed()),this,SLOT(Connect()));

    connect (pushButtonDisconnect,SIGNAL(clicked()),this,SLOT(Disconnect()));

    connect (pushButtonGet,SIGNAL(clicked()),this,SLOT(GetFile()));

    connect (progressDialog, SIGNAL(canceled()),this,SLOT(CancelGetFile()));

    connect (pushButtonQuit, SIGNAL(clicked()),this,SLOT(Quit()));

    connect (treeWidget,SIGNAL(itemActivated(QTreeWidgetItem*,int)),this,SLOT(ProcessItem(QTreeWidgetItem*,int)));

    connect (pushButtonCdUp,SIGNAL(clicked()),this,SLOT(CdUp()));



}

void MyWindow::SetupUi(QWidget *Form)

{

    Form->resize(200,345);

    gridLayout = new QGridLayout(Form);

    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));

    labelFTP = new QLabel(Form);

    labelFTP->setObjectName(QString::fromUtf8("labelFTP"));


    gridLayout->addWidget(labelFTP, 0, 0, 1, 1);


    lineEdit = new QLineEdit (Form);

    lineEdit->setObjectName(QString::fromUtf8("lineEdit"));


    gridLayout ->addWidget(lineEdit,0,1,1,4);


    treeWidget = new QTreeWidget (Form);

    treeWidget->setObjectName(QString::fromUtf8("treeWidget"));

    treeWidget->setEnabled(false);


    gridLayout->addWidget(treeWidget, 1, 0, 1, 5);


    pushButtonConnect = new QPushButton(Form);

    pushButtonConnect->setObjectName(QString::fromUtf8("pushButtonConnect"));


    gridLayout->addWidget(pushButtonConnect,2,1,1,1);


    pushButtonDisconnect = new QPushButton(Form);

    pushButtonDisconnect->setObjectName(QString::fromUtf8("pushButtonDisconnect"));

    pushButtonDisconnect->setEnabled(false);


    gridLayout->addWidget(pushButtonDisconnect, 2, 2, 1, 1);


    pushButtonCdUp = new QPushButton(Form);

    pushButtonCdUp->setObjectName(QString::fromUtf8("pushButtonCdUp"));

    pushButtonCdUp->setEnabled(false);


    gridLayout->addWidget(pushButtonCdUp, 2, 3, 1, 1);


    pushButtonGet = new QPushButton(Form);

    pushButtonGet->setObjectName(QString::fromUtf8("pushButtonGet"));

    pushButtonGet->setEnabled(false);


    gridLayout->addWidget(pushButtonGet, 2, 4, 1, 1);


    line = new QFrame(Form);

    line->setObjectName(QString::fromUtf8("line"));

    line->setFrameShape(QFrame::HLine);

    line->setFrameShadow(QFrame::Sunken);


    gridLayout->addWidget(line, 3, 0, 1, 5);


    pushButtonQuit = new QPushButton(Form);

    pushButtonQuit->setObjectName(QString::fromUtf8("pushButtonQuit"));


    gridLayout->addWidget(pushButtonQuit, 4, 4, 1, 1);



    Form->setWindowTitle("Klient FTP");

    labelFTP->setText("Serwer FTP");

    lineEdit->setToolTip("Adres URL zdalnego komputera");

    lineEdit->setText("ftp://");

    treeWidget->headerItem()->setText(0,"Nazwa");

    treeWidget->headerItem()->setText(1,"Rozmiar");

    treeWidget->headerItem()->setText(2,"Wlasciciel");

    treeWidget->headerItem()->setText(3,"Grupa");

    treeWidget->headerItem()->setText(4,"Czas");

    treeWidget->setToolTip("Pliki i foldery na zdalnym komputerze");

    pushButtonConnect->setToolTip("Polaczenie ze zdalnym komputerem");

    pushButtonConnect->setText("Połącz");

    pushButtonDisconnect->setToolTip("Rozłączenie ze zdalnym komputerem");

    pushButtonDisconnect->setText("Rozłącz");

    pushButtonCdUp->setToolTip("Przejście do katalogu nadrzędnego");

    pushButtonCdUp->setText(QString());

    pushButtonGet->setToolTip("Pobieranie pliku");

    pushButtonGet->setText("Pobierz");

    pushButtonQuit->setToolTip("Zakończ działanie");

    pushButtonQuit->setText("Zakończ");




}


void MyWindow::Connect ()

{

    if(!ftp)

    {

       QUrl url(lineEdit -> text ().toLower ());

        if(!url.isValid() || url.scheme() != "ftp")

        {

            QMessageBox::critical(this,"Błąd", "niepoprawny adres URL");

            return;

        }

    }

}

main.cpp

#include 

#include 


int main(int argc, char *argv[])

{

    QApplication app (argc, argv);

    QTextCodec::setCodecForCStrings (QTextCodec::codecForName ("Windows-1250"));

    MyWindow window;

    window.show ();

    return app.exec();

}

Jeżeli usunę #include , to wyświetla mi się "variable QUrl has initializer but incomplete type", a jak zostawię to jest błąd "collect2: ld returned 1 exit status". Jak rozwiązać ten problem?


(Spam) #2

Jeśli otworzysz okienko (z tego, co pamiętam) „Komunikaty kompilatora”, to tam znajdziesz dokładny opis błędu. Bo zakładam, że to Qt Creator.


(Razi) #3

network do projektu dodany? jak nie, to edytuj plik .pro i dodaj:

QT+= network

potem wyczyść i zbuduj projekt.

Ten moduł jest wymagany przez QFtp i pewnie on powoduje błąd kolekcji linkera. Zamieszczaj wszystkie komunikaty błędów z tej zakładki co Wasacz napisał, a nie tylko Problemy podczas budowania