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?