A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FQt%2FQFtp</id>
		<title>C++/Qt/QFtp - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FQt%2FQFtp"/>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B/Qt/QFtp&amp;action=history"/>
		<updated>2026-04-10T00:57:28Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B/Qt/QFtp&amp;diff=1074&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B/Qt/QFtp&amp;diff=1074&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B/Qt/QFtp&amp;diff=1075&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B/Qt/QFtp&amp;diff=1075&amp;oldid=prev"/>
				<updated>2010-05-25T10:24:45Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==QFtp base ftp window==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
/****************************************************************************&lt;br /&gt;
**&lt;br /&gt;
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;br /&gt;
** All rights reserved.&lt;br /&gt;
** Contact: Nokia Corporation (qt-info@nokia.com)&lt;br /&gt;
**&lt;br /&gt;
** This file is part of the examples of the Qt Toolkit.&lt;br /&gt;
**&lt;br /&gt;
** $QT_BEGIN_LICENSE:LGPL$&lt;br /&gt;
** Commercial Usage&lt;br /&gt;
** Licensees holding valid Qt Commercial licenses may use this file in&lt;br /&gt;
** accordance with the Qt Commercial License Agreement provided with the&lt;br /&gt;
** Software or, alternatively, in accordance with the terms contained in&lt;br /&gt;
** a written agreement between you and Nokia.&lt;br /&gt;
**&lt;br /&gt;
** GNU Lesser General Public License Usage&lt;br /&gt;
** Alternatively, this file may be used under the terms of the GNU Lesser&lt;br /&gt;
** General Public License version 2.1 as published by the Free Software&lt;br /&gt;
** Foundation and appearing in the file LICENSE.LGPL included in the&lt;br /&gt;
** packaging of this file.  Please review the following information to&lt;br /&gt;
** ensure the GNU Lesser General Public License version 2.1 requirements&lt;br /&gt;
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.&lt;br /&gt;
**&lt;br /&gt;
** In addition, as a special exception, Nokia gives you certain additional&lt;br /&gt;
** rights.  These rights are described in the Nokia Qt LGPL Exception&lt;br /&gt;
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.&lt;br /&gt;
**&lt;br /&gt;
** GNU General Public License Usage&lt;br /&gt;
** Alternatively, this file may be used under the terms of the GNU&lt;br /&gt;
** General Public License version 3.0 as published by the Free Software&lt;br /&gt;
** Foundation and appearing in the file LICENSE.GPL included in the&lt;br /&gt;
** packaging of this file.  Please review the following information to&lt;br /&gt;
** ensure the GNU General Public License version 3.0 requirements will be&lt;br /&gt;
** met: http://www.gnu.org/copyleft/gpl.html.&lt;br /&gt;
**&lt;br /&gt;
** If you have questions regarding the use of this file, please contact&lt;br /&gt;
** Nokia at qt-info@nokia.com.&lt;br /&gt;
** $QT_END_LICENSE$&lt;br /&gt;
**&lt;br /&gt;
****************************************************************************/&lt;br /&gt;
#ifndef FTPWINDOW_H&lt;br /&gt;
#define FTPWINDOW_H&lt;br /&gt;
#include &amp;lt;QDialog&amp;gt;&lt;br /&gt;
#include &amp;lt;QHash&amp;gt;&lt;br /&gt;
QT_BEGIN_NAMESPACE&lt;br /&gt;
class QDialogButtonBox;&lt;br /&gt;
class QFile;&lt;br /&gt;
class QFtp;&lt;br /&gt;
class QLabel;&lt;br /&gt;
class QLineEdit;&lt;br /&gt;
class QTreeWidget;&lt;br /&gt;
class QTreeWidgetItem;&lt;br /&gt;
class QProgressDialog;&lt;br /&gt;
class QPushButton;&lt;br /&gt;
class QUrlInfo;&lt;br /&gt;
QT_END_NAMESPACE&lt;br /&gt;
class FtpWindow : public QDialog&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    FtpWindow(QWidget *parent = 0);&lt;br /&gt;
    QSize sizeHint() const;&lt;br /&gt;
&lt;br /&gt;
private slots:&lt;br /&gt;
    void connectOrDisconnect();&lt;br /&gt;
    void downloadFile();&lt;br /&gt;
    void cancelDownload();&lt;br /&gt;
    void ftpCommandFinished(int commandId, bool error);&lt;br /&gt;
    void addToList(const QUrlInfo &amp;amp;urlInfo);&lt;br /&gt;
    void processItem(QTreeWidgetItem *item, int column);&lt;br /&gt;
    void cdToParent();&lt;br /&gt;
    void updateDataTransferProgress(qint64 readBytes,&lt;br /&gt;
                                    qint64 totalBytes);&lt;br /&gt;
    void enableDownloadButton();&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    QLabel *ftpServerLabel;&lt;br /&gt;
    QLineEdit *ftpServerLineEdit;&lt;br /&gt;
    QLabel *statusLabel;&lt;br /&gt;
    QTreeWidget *fileList;&lt;br /&gt;
    QPushButton *cdToParentButton;&lt;br /&gt;
    QPushButton *connectButton;&lt;br /&gt;
    QPushButton *downloadButton;&lt;br /&gt;
    QPushButton *quitButton;&lt;br /&gt;
    QDialogButtonBox *buttonBox;&lt;br /&gt;
    QProgressDialog *progressDialog;&lt;br /&gt;
&lt;br /&gt;
    QHash&amp;lt;QString, bool&amp;gt; isDirectory;&lt;br /&gt;
    QString currentPath;&lt;br /&gt;
    QFtp *ftp;&lt;br /&gt;
    QFile *file;&lt;br /&gt;
};&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
#include &amp;lt;QtNetwork&amp;gt;&lt;br /&gt;
#include &amp;quot;ftpwindow.h&amp;quot;&lt;br /&gt;
FtpWindow::FtpWindow(QWidget *parent)&lt;br /&gt;
    : QDialog(parent), ftp(0)&lt;br /&gt;
{&lt;br /&gt;
    ftpServerLabel = new QLabel(tr(&amp;quot;Ftp &amp;amp;server:&amp;quot;));&lt;br /&gt;
    ftpServerLineEdit = new QLineEdit(&amp;quot;ftp.qt.nokia.com&amp;quot;);&lt;br /&gt;
    ftpServerLabel-&amp;gt;setBuddy(ftpServerLineEdit);&lt;br /&gt;
    statusLabel = new QLabel(tr(&amp;quot;Please enter the name of an FTP server.&amp;quot;));&lt;br /&gt;
    fileList = new QTreeWidget;&lt;br /&gt;
    fileList-&amp;gt;setEnabled(false);&lt;br /&gt;
    fileList-&amp;gt;setRootIsDecorated(false);&lt;br /&gt;
    fileList-&amp;gt;setHeaderLabels(QStringList() &amp;lt;&amp;lt; tr(&amp;quot;Name&amp;quot;) &amp;lt;&amp;lt; tr(&amp;quot;Size&amp;quot;) &amp;lt;&amp;lt; tr(&amp;quot;Owner&amp;quot;) &amp;lt;&amp;lt; tr(&amp;quot;Group&amp;quot;) &amp;lt;&amp;lt; tr(&amp;quot;Time&amp;quot;));&lt;br /&gt;
    fileList-&amp;gt;header()-&amp;gt;setStretchLastSection(false);&lt;br /&gt;
    connectButton = new QPushButton(tr(&amp;quot;Connect&amp;quot;));&lt;br /&gt;
    connectButton-&amp;gt;setDefault(true);&lt;br /&gt;
    &lt;br /&gt;
    cdToParentButton = new QPushButton;&lt;br /&gt;
    cdToParentButton-&amp;gt;setIcon(QPixmap(&amp;quot;:/images/cdtoparent.png&amp;quot;));&lt;br /&gt;
    cdToParentButton-&amp;gt;setEnabled(false);&lt;br /&gt;
    downloadButton = new QPushButton(tr(&amp;quot;Download&amp;quot;));&lt;br /&gt;
    downloadButton-&amp;gt;setEnabled(false);&lt;br /&gt;
    quitButton = new QPushButton(tr(&amp;quot;Quit&amp;quot;));&lt;br /&gt;
    buttonBox = new QDialogButtonBox;&lt;br /&gt;
    buttonBox-&amp;gt;addButton(downloadButton, QDialogButtonBox::ActionRole);&lt;br /&gt;
    buttonBox-&amp;gt;addButton(quitButton, QDialogButtonBox::RejectRole);&lt;br /&gt;
    progressDialog = new QProgressDialog(this);&lt;br /&gt;
    connect(fileList, SIGNAL(itemActivated(QTreeWidgetItem *, int)),&lt;br /&gt;
            this, SLOT(processItem(QTreeWidgetItem *, int)));&lt;br /&gt;
    connect(fileList, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),&lt;br /&gt;
            this, SLOT(enableDownloadButton()));&lt;br /&gt;
    connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));&lt;br /&gt;
    connect(connectButton, SIGNAL(clicked()), this, SLOT(connectOrDisconnect()));&lt;br /&gt;
    connect(cdToParentButton, SIGNAL(clicked()), this, SLOT(cdToParent()));&lt;br /&gt;
    connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile()));&lt;br /&gt;
    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));&lt;br /&gt;
    QHBoxLayout *topLayout = new QHBoxLayout;&lt;br /&gt;
    topLayout-&amp;gt;addWidget(ftpServerLabel);&lt;br /&gt;
    topLayout-&amp;gt;addWidget(ftpServerLineEdit);&lt;br /&gt;
    topLayout-&amp;gt;addWidget(cdToParentButton);&lt;br /&gt;
    topLayout-&amp;gt;addWidget(connectButton);&lt;br /&gt;
    &lt;br /&gt;
    QVBoxLayout *mainLayout = new QVBoxLayout;&lt;br /&gt;
    mainLayout-&amp;gt;addLayout(topLayout);&lt;br /&gt;
    mainLayout-&amp;gt;addWidget(fileList);&lt;br /&gt;
    mainLayout-&amp;gt;addWidget(statusLabel);&lt;br /&gt;
    mainLayout-&amp;gt;addWidget(buttonBox);&lt;br /&gt;
    setLayout(mainLayout);&lt;br /&gt;
    setWindowTitle(tr(&amp;quot;FTP&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
QSize FtpWindow::sizeHint() const&lt;br /&gt;
{&lt;br /&gt;
    return QSize(500, 300);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::connectOrDisconnect()&lt;br /&gt;
{&lt;br /&gt;
    if (ftp) {&lt;br /&gt;
        ftp-&amp;gt;abort();&lt;br /&gt;
        ftp-&amp;gt;deleteLater();&lt;br /&gt;
        ftp = 0;&lt;br /&gt;
        fileList-&amp;gt;setEnabled(false);&lt;br /&gt;
        cdToParentButton-&amp;gt;setEnabled(false);&lt;br /&gt;
        downloadButton-&amp;gt;setEnabled(false);&lt;br /&gt;
        connectButton-&amp;gt;setEnabled(true);&lt;br /&gt;
        connectButton-&amp;gt;setText(tr(&amp;quot;Connect&amp;quot;));&lt;br /&gt;
#ifndef QT_NO_CURSOR&lt;br /&gt;
        setCursor(Qt::ArrowCursor);&lt;br /&gt;
#endif&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
#ifndef QT_NO_CURSOR&lt;br /&gt;
    setCursor(Qt::WaitCursor);&lt;br /&gt;
#endif&lt;br /&gt;
    &lt;br /&gt;
    ftp = new QFtp(this);&lt;br /&gt;
    connect(ftp, SIGNAL(commandFinished(int, bool)),&lt;br /&gt;
            this, SLOT(ftpCommandFinished(int, bool)));&lt;br /&gt;
    connect(ftp, SIGNAL(listInfo(const QUrlInfo &amp;amp;)),&lt;br /&gt;
            this, SLOT(addToList(const QUrlInfo &amp;amp;)));&lt;br /&gt;
    connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)),&lt;br /&gt;
            this, SLOT(updateDataTransferProgress(qint64, qint64)));&lt;br /&gt;
    fileList-&amp;gt;clear();&lt;br /&gt;
    currentPath.clear();&lt;br /&gt;
    isDirectory.clear();&lt;br /&gt;
&lt;br /&gt;
    QUrl url(ftpServerLineEdit-&amp;gt;text());&lt;br /&gt;
    if (!url.isValid() || url.scheme().toLower() != QLatin1String(&amp;quot;ftp&amp;quot;)) {&lt;br /&gt;
        ftp-&amp;gt;connectToHost(ftpServerLineEdit-&amp;gt;text(), 21);&lt;br /&gt;
        ftp-&amp;gt;login();&lt;br /&gt;
    } else {&lt;br /&gt;
        ftp-&amp;gt;connectToHost(url.host(), url.port(21));&lt;br /&gt;
        if (!url.userName().isEmpty())&lt;br /&gt;
            ftp-&amp;gt;login(QUrl::fromPercentEncoding(url.userName().toLatin1()), url.password());&lt;br /&gt;
        else&lt;br /&gt;
            ftp-&amp;gt;login();&lt;br /&gt;
        if (!url.path().isEmpty())&lt;br /&gt;
            ftp-&amp;gt;cd(url.path());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fileList-&amp;gt;setEnabled(true);&lt;br /&gt;
    connectButton-&amp;gt;setEnabled(false);&lt;br /&gt;
    connectButton-&amp;gt;setText(tr(&amp;quot;Disconnect&amp;quot;));&lt;br /&gt;
    statusLabel-&amp;gt;setText(tr(&amp;quot;Connecting to FTP server %1...&amp;quot;)&lt;br /&gt;
                         .arg(ftpServerLineEdit-&amp;gt;text()));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::downloadFile()&lt;br /&gt;
{&lt;br /&gt;
    QString fileName = fileList-&amp;gt;currentItem()-&amp;gt;text(0);&lt;br /&gt;
//&lt;br /&gt;
    if (QFile::exists(fileName)) {&lt;br /&gt;
        QMessageBox::information(this, tr(&amp;quot;FTP&amp;quot;),&lt;br /&gt;
                                 tr(&amp;quot;There already exists a file called %1 in &amp;quot;&lt;br /&gt;
                                    &amp;quot;the current directory.&amp;quot;)&lt;br /&gt;
                                 .arg(fileName));&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    file = new QFile(fileName);&lt;br /&gt;
    if (!file-&amp;gt;open(QIODevice::WriteOnly)) {&lt;br /&gt;
        QMessageBox::information(this, tr(&amp;quot;FTP&amp;quot;),&lt;br /&gt;
                                 tr(&amp;quot;Unable to save the file %1: %2.&amp;quot;)&lt;br /&gt;
                                 .arg(fileName).arg(file-&amp;gt;errorString()));&lt;br /&gt;
        delete file;&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    ftp-&amp;gt;get(fileList-&amp;gt;currentItem()-&amp;gt;text(0), file);&lt;br /&gt;
    progressDialog-&amp;gt;setLabelText(tr(&amp;quot;Downloading %1...&amp;quot;).arg(fileName));&lt;br /&gt;
    downloadButton-&amp;gt;setEnabled(false);&lt;br /&gt;
    progressDialog-&amp;gt;exec();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::cancelDownload()&lt;br /&gt;
{&lt;br /&gt;
    ftp-&amp;gt;abort();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::ftpCommandFinished(int, bool error)&lt;br /&gt;
{&lt;br /&gt;
#ifndef QT_NO_CURSOR&lt;br /&gt;
    setCursor(Qt::ArrowCursor);&lt;br /&gt;
#endif&lt;br /&gt;
    if (ftp-&amp;gt;currentCommand() == QFtp::ConnectToHost) {&lt;br /&gt;
        if (error) {&lt;br /&gt;
            QMessageBox::information(this, tr(&amp;quot;FTP&amp;quot;),&lt;br /&gt;
                                     tr(&amp;quot;Unable to connect to the FTP server &amp;quot;&lt;br /&gt;
                                        &amp;quot;at %1. Please check that the host &amp;quot;&lt;br /&gt;
                                        &amp;quot;name is correct.&amp;quot;)&lt;br /&gt;
                                     .arg(ftpServerLineEdit-&amp;gt;text()));&lt;br /&gt;
            connectOrDisconnect();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        statusLabel-&amp;gt;setText(tr(&amp;quot;Logged onto %1.&amp;quot;)&lt;br /&gt;
                             .arg(ftpServerLineEdit-&amp;gt;text()));&lt;br /&gt;
        fileList-&amp;gt;setFocus();&lt;br /&gt;
        downloadButton-&amp;gt;setDefault(true);&lt;br /&gt;
        connectButton-&amp;gt;setEnabled(true);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (ftp-&amp;gt;currentCommand() == QFtp::Login)&lt;br /&gt;
        ftp-&amp;gt;list();&lt;br /&gt;
&lt;br /&gt;
    if (ftp-&amp;gt;currentCommand() == QFtp::Get) {&lt;br /&gt;
        if (error) {&lt;br /&gt;
            statusLabel-&amp;gt;setText(tr(&amp;quot;Canceled download of %1.&amp;quot;)&lt;br /&gt;
                                 .arg(file-&amp;gt;fileName()));&lt;br /&gt;
            file-&amp;gt;close();&lt;br /&gt;
            file-&amp;gt;remove();&lt;br /&gt;
        } else {&lt;br /&gt;
            statusLabel-&amp;gt;setText(tr(&amp;quot;Downloaded %1 to current directory.&amp;quot;)&lt;br /&gt;
                                 .arg(file-&amp;gt;fileName()));&lt;br /&gt;
            file-&amp;gt;close();&lt;br /&gt;
        }&lt;br /&gt;
        delete file;&lt;br /&gt;
        enableDownloadButton();&lt;br /&gt;
        progressDialog-&amp;gt;hide();&lt;br /&gt;
&lt;br /&gt;
    } else if (ftp-&amp;gt;currentCommand() == QFtp::List) {&lt;br /&gt;
        if (isDirectory.isEmpty()) {&lt;br /&gt;
            fileList-&amp;gt;addTopLevelItem(new QTreeWidgetItem(QStringList() &amp;lt;&amp;lt; tr(&amp;quot;&amp;lt;empty&amp;gt;&amp;quot;)));&lt;br /&gt;
            fileList-&amp;gt;setEnabled(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::addToList(const QUrlInfo &amp;amp;urlInfo)&lt;br /&gt;
{&lt;br /&gt;
    QTreeWidgetItem *item = new QTreeWidgetItem;&lt;br /&gt;
    item-&amp;gt;setText(0, urlInfo.name());&lt;br /&gt;
    item-&amp;gt;setText(1, QString::number(urlInfo.size()));&lt;br /&gt;
    item-&amp;gt;setText(2, urlInfo.owner());&lt;br /&gt;
    item-&amp;gt;setText(3, urlInfo.group());&lt;br /&gt;
    item-&amp;gt;setText(4, urlInfo.lastModified().toString(&amp;quot;MMM dd yyyy&amp;quot;));&lt;br /&gt;
    QPixmap pixmap(urlInfo.isDir() ? &amp;quot;:/images/dir.png&amp;quot; : &amp;quot;:/images/file.png&amp;quot;);&lt;br /&gt;
    item-&amp;gt;setIcon(0, pixmap);&lt;br /&gt;
    isDirectory[urlInfo.name()] = urlInfo.isDir();&lt;br /&gt;
    fileList-&amp;gt;addTopLevelItem(item);&lt;br /&gt;
    if (!fileList-&amp;gt;currentItem()) {&lt;br /&gt;
        fileList-&amp;gt;setCurrentItem(fileList-&amp;gt;topLevelItem(0));&lt;br /&gt;
        fileList-&amp;gt;setEnabled(true);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::processItem(QTreeWidgetItem *item, int /*column*/)&lt;br /&gt;
{&lt;br /&gt;
    QString name = item-&amp;gt;text(0);&lt;br /&gt;
    if (isDirectory.value(name)) {&lt;br /&gt;
        fileList-&amp;gt;clear();&lt;br /&gt;
        isDirectory.clear();&lt;br /&gt;
        currentPath += &amp;quot;/&amp;quot; + name;&lt;br /&gt;
        ftp-&amp;gt;cd(name);&lt;br /&gt;
        ftp-&amp;gt;list();&lt;br /&gt;
        cdToParentButton-&amp;gt;setEnabled(true);&lt;br /&gt;
#ifndef QT_NO_CURSOR&lt;br /&gt;
        setCursor(Qt::WaitCursor);&lt;br /&gt;
#endif&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::cdToParent()&lt;br /&gt;
{&lt;br /&gt;
#ifndef QT_NO_CURSOR&lt;br /&gt;
    setCursor(Qt::WaitCursor);&lt;br /&gt;
#endif&lt;br /&gt;
    fileList-&amp;gt;clear();&lt;br /&gt;
    isDirectory.clear();&lt;br /&gt;
    currentPath = currentPath.left(currentPath.lastIndexOf(&amp;quot;/&amp;quot;));&lt;br /&gt;
    if (currentPath.isEmpty()) {&lt;br /&gt;
        cdToParentButton-&amp;gt;setEnabled(false);&lt;br /&gt;
        ftp-&amp;gt;cd(&amp;quot;/&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
        ftp-&amp;gt;cd(currentPath);&lt;br /&gt;
    }&lt;br /&gt;
    ftp-&amp;gt;list();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::updateDataTransferProgress(qint64 readBytes,&lt;br /&gt;
                                           qint64 totalBytes)&lt;br /&gt;
{&lt;br /&gt;
    progressDialog-&amp;gt;setMaximum(totalBytes);&lt;br /&gt;
    progressDialog-&amp;gt;setValue(readBytes);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FtpWindow::enableDownloadButton()&lt;br /&gt;
{&lt;br /&gt;
    QTreeWidgetItem *current = fileList-&amp;gt;currentItem();&lt;br /&gt;
    if (current) {&lt;br /&gt;
        QString currentFile = current-&amp;gt;text(0);&lt;br /&gt;
        downloadButton-&amp;gt;setEnabled(!isDirectory.value(currentFile));&lt;br /&gt;
    } else {&lt;br /&gt;
        downloadButton-&amp;gt;setEnabled(false);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;
#include &amp;quot;ftpwindow.h&amp;quot;&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
    Q_INIT_RESOURCE(ftp);&lt;br /&gt;
    QApplication app(argc, argv);&lt;br /&gt;
    FtpWindow ftpWin;&lt;br /&gt;
    ftpWin.show();&lt;br /&gt;
    return ftpWin.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Qt based Ftp dialog==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Foundations of Qt Development\Chapter14\ftp\ftpdialog.cpp&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;QFileDialog&amp;gt;&lt;br /&gt;
#include &amp;lt;QMessageBox&amp;gt;&lt;br /&gt;
#include &amp;quot;ftpdialog.h&amp;quot;&lt;br /&gt;
FtpDialog::FtpDialog() : QDialog()&lt;br /&gt;
{&lt;br /&gt;
  file = 0;&lt;br /&gt;
  &lt;br /&gt;
  ui.setupUi( this );&lt;br /&gt;
  &lt;br /&gt;
  connect( ui.connectButton, SIGNAL(clicked()), this, SLOT(connectClicked()) );&lt;br /&gt;
  connect( ui.disconnectButton, SIGNAL(clicked()), this, SLOT(disconnectClicked()) );&lt;br /&gt;
  connect( ui.cdButton, SIGNAL(clicked()), this, SLOT(cdClicked()) );&lt;br /&gt;
  connect( ui.upButton, SIGNAL(clicked()), this, SLOT(upClicked()) );&lt;br /&gt;
  connect( ui.getButton, SIGNAL(clicked()), this, SLOT(getClicked()) );&lt;br /&gt;
  &lt;br /&gt;
  connect( ui.dirList, SIGNAL(itemSelectionChanged()), this, SLOT(selectionChanged()) );&lt;br /&gt;
  &lt;br /&gt;
  connect( &amp;amp;ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftpFinished(int,bool)) );&lt;br /&gt;
  connect( &amp;amp;ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(ftpListInfo(QUrlInfo)) );&lt;br /&gt;
  connect( &amp;amp;ftp, SIGNAL(dataTransferProgress(qint64,qint64)), this, SLOT(ftpProgress(qint64,qint64)) );&lt;br /&gt;
  &lt;br /&gt;
  ui.disconnectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.upButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::connectClicked()&lt;br /&gt;
{&lt;br /&gt;
  ui.connectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  &lt;br /&gt;
  ftp.connectToHost( &amp;quot;ftp.trolltech.com&amp;quot; );&lt;br /&gt;
  ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Connecting to host...&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::disconnectClicked()&lt;br /&gt;
{&lt;br /&gt;
  ui.disconnectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.upButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  &lt;br /&gt;
  ftp.close();&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::cdClicked()&lt;br /&gt;
{&lt;br /&gt;
  ui.disconnectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.upButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ftp.cd( ui.dirList-&amp;gt;selectedItems()[0]-&amp;gt;text() );&lt;br /&gt;
  ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Changing directory...&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::upClicked()&lt;br /&gt;
{&lt;br /&gt;
  ui.disconnectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.upButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ftp.cd(&amp;quot;..&amp;quot;);&lt;br /&gt;
  ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Changing directory...&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::getClicked()&lt;br /&gt;
{&lt;br /&gt;
  QString fileName = QFileDialog::getSaveFileName( this, tr(&amp;quot;Get File&amp;quot;), ui.dirList-&amp;gt;selectedItems()[0]-&amp;gt;text() );&lt;br /&gt;
  if( fileName.isEmpty() )&lt;br /&gt;
    return;&lt;br /&gt;
    &lt;br /&gt;
  file = new QFile( fileName, this );&lt;br /&gt;
  if( !file-&amp;gt;open( QIODevice::WriteOnly ) )&lt;br /&gt;
  {&lt;br /&gt;
    QMessageBox::warning( this, tr(&amp;quot;Error&amp;quot;), tr(&amp;quot;Failed to open file %1 for writing.&amp;quot;).arg( fileName ) );&lt;br /&gt;
    &lt;br /&gt;
    delete file;&lt;br /&gt;
    file = 0;&lt;br /&gt;
    &lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  ui.disconnectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.upButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ftp.get( ui.dirList-&amp;gt;selectedItems()[0]-&amp;gt;text(), file );&lt;br /&gt;
  ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Downloading file...&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::ftpProgress( qint64 done, qint64 total )&lt;br /&gt;
{&lt;br /&gt;
  if( total == 0 )&lt;br /&gt;
    return;&lt;br /&gt;
    &lt;br /&gt;
  ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Downloading file... (%1%)&amp;quot;).arg( QString::number( double(done)*100/double(total), &amp;quot;f&amp;quot;, 1 ) ) );&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::selectionChanged()&lt;br /&gt;
{&lt;br /&gt;
  if( ui.dirList-&amp;gt;selectedItems().count() == 1 )&lt;br /&gt;
  {&lt;br /&gt;
    if( files.indexOf( ui.dirList-&amp;gt;selectedItems()[0]-&amp;gt;text() ) == -1 )&lt;br /&gt;
    {&lt;br /&gt;
      ui.cdButton-&amp;gt;setEnabled( ui.disconnectButton-&amp;gt;isEnabled() );&lt;br /&gt;
      ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
      ui.getButton-&amp;gt;setEnabled( ui.disconnectButton-&amp;gt;isEnabled() );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
    ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::getFileList()&lt;br /&gt;
{&lt;br /&gt;
  ui.disconnectButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.cdButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.upButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.getButton-&amp;gt;setEnabled( false );&lt;br /&gt;
  ui.dirList-&amp;gt;clear();&lt;br /&gt;
  files.clear();&lt;br /&gt;
  &lt;br /&gt;
  if( ftp.state() == QFtp::LoggedIn )&lt;br /&gt;
    ftp.list();&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::ftpListInfo( QUrlInfo info )&lt;br /&gt;
{&lt;br /&gt;
  ui.dirList-&amp;gt;addItem( info.name() );&lt;br /&gt;
  if( info.isFile() )&lt;br /&gt;
    files &amp;lt;&amp;lt; info.name();&lt;br /&gt;
}&lt;br /&gt;
void FtpDialog::ftpFinished( int request, bool error )&lt;br /&gt;
{&lt;br /&gt;
  if( error )&lt;br /&gt;
  {&lt;br /&gt;
    switch( ftp.currentCommand() )&lt;br /&gt;
    {&lt;br /&gt;
      case QFtp::ConnectToHost:&lt;br /&gt;
        QMessageBox::warning( this, tr(&amp;quot;Error&amp;quot;), tr(&amp;quot;Failed to connect to host.&amp;quot;) );&lt;br /&gt;
        ui.connectButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        &lt;br /&gt;
        break; &lt;br /&gt;
      case QFtp::Login:&lt;br /&gt;
        QMessageBox::warning( this, tr(&amp;quot;Error&amp;quot;), tr(&amp;quot;Failed to login.&amp;quot;) );&lt;br /&gt;
        ui.connectButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        &lt;br /&gt;
        break; &lt;br /&gt;
      case QFtp::List:&lt;br /&gt;
        QMessageBox::warning( this, tr(&amp;quot;Error&amp;quot;), tr(&amp;quot;Failed to get file list.\nClosing connection.&amp;quot;) );&lt;br /&gt;
        ftp.close();&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::Cd:&lt;br /&gt;
        QMessageBox::warning( this, tr(&amp;quot;Error&amp;quot;), tr(&amp;quot;Failed to change directory.&amp;quot;) );&lt;br /&gt;
        getFileList();&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::Get:&lt;br /&gt;
        QMessageBox::warning( this, tr(&amp;quot;Error&amp;quot;), tr(&amp;quot;Failed to get file?&amp;quot;) );&lt;br /&gt;
        file-&amp;gt;close();&lt;br /&gt;
        file-&amp;gt;remove();&lt;br /&gt;
        &lt;br /&gt;
        delete file;&lt;br /&gt;
        file = 0;&lt;br /&gt;
        &lt;br /&gt;
        ui.disconnectButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        ui.upButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        selectionChanged();&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Ready.&amp;quot;) );&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    switch( ftp.currentCommand() )&lt;br /&gt;
    {&lt;br /&gt;
      case QFtp::ConnectToHost:&lt;br /&gt;
        ftp.login();&lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::Login:&lt;br /&gt;
        getFileList();&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::Close:&lt;br /&gt;
        ui.connectButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        getFileList();&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::List:&lt;br /&gt;
        ui.disconnectButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        ui.upButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Ready.&amp;quot;) );&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::Cd:&lt;br /&gt;
        getFileList();&lt;br /&gt;
        &lt;br /&gt;
        break;&lt;br /&gt;
      case QFtp::Get:&lt;br /&gt;
        file-&amp;gt;close();&lt;br /&gt;
        &lt;br /&gt;
        delete file;&lt;br /&gt;
        file = 0;&lt;br /&gt;
        &lt;br /&gt;
        ui.disconnectButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        ui.upButton-&amp;gt;setEnabled( true );&lt;br /&gt;
        selectionChanged();&lt;br /&gt;
        ui.statusLabel-&amp;gt;setText( tr(&amp;quot;Ready.&amp;quot;) );&lt;br /&gt;
        break;        &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Foundations of Qt Development\Chapter14\ftp\ftpdialog.h&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#ifndef FTPDIALOG_H&lt;br /&gt;
#define FTPDIALOG_H&lt;br /&gt;
#include &amp;lt;QFtp&amp;gt;&lt;br /&gt;
#include &amp;lt;QDialog&amp;gt;&lt;br /&gt;
#include &amp;lt;QFile&amp;gt;&lt;br /&gt;
#include &amp;quot;ui_ftpdialog.h&amp;quot;&lt;br /&gt;
class FtpDialog : public QDialog&lt;br /&gt;
{&lt;br /&gt;
  Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
  FtpDialog();&lt;br /&gt;
  &lt;br /&gt;
private slots:&lt;br /&gt;
  void connectClicked();&lt;br /&gt;
  void disconnectClicked();&lt;br /&gt;
  void cdClicked();&lt;br /&gt;
  void upClicked();&lt;br /&gt;
  void getClicked();&lt;br /&gt;
  &lt;br /&gt;
  void selectionChanged();&lt;br /&gt;
  &lt;br /&gt;
  void ftpFinished(int,bool);&lt;br /&gt;
  void ftpListInfo(QUrlInfo);&lt;br /&gt;
  void ftpProgress(qint64,qint64);&lt;br /&gt;
  &lt;br /&gt;
private:&lt;br /&gt;
  void getFileList();  &lt;br /&gt;
  &lt;br /&gt;
  Ui::FtpDialog ui;&lt;br /&gt;
    &lt;br /&gt;
  QFtp ftp;&lt;br /&gt;
  QFile *file;&lt;br /&gt;
  &lt;br /&gt;
  QStringList files;&lt;br /&gt;
};&lt;br /&gt;
#endif // FTPDIALOG_H&lt;br /&gt;
&lt;br /&gt;
Foundations of Qt Development\Chapter14\ftp\main.cpp&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006-2007, Johan Thelin&lt;br /&gt;
 * &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without modification, &lt;br /&gt;
 * are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 *     * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
 *       this list of conditions and the following disclaimer.&lt;br /&gt;
 *     * Redistributions in binary form must reproduce the above copyright notice,  &lt;br /&gt;
 *       this list of conditions and the following disclaimer in the documentation &lt;br /&gt;
 *       and/or other materials provided with the distribution.&lt;br /&gt;
 *     * Neither the name of APress nor the names of its contributors &lt;br /&gt;
 *       may be used to endorse or promote products derived from this software &lt;br /&gt;
 *       without specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;
#include &amp;quot;ftpdialog.h&amp;quot;&lt;br /&gt;
int main( int argc, char **argv )&lt;br /&gt;
{&lt;br /&gt;
  QApplication app( argc, argv );&lt;br /&gt;
  &lt;br /&gt;
  FtpDialog dlg;&lt;br /&gt;
  dlg.show();&lt;br /&gt;
  &lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>