Сигналы QProgressbar и QNetworkReply - PullRequest
       10

Сигналы QProgressbar и QNetworkReply

0 голосов
/ 16 января 2010

Я пишу приложение на C ++ с Qt Framework. Он должен загрузить файл через http и отобразить ход загрузки с помощью QProgressbar - но я не получаю эту часть!

Пример кода:

QProgressBar* pbar = new QProgressBar();
//calls the website and returns the QNetworkReply*
QNetworkReply* downloader = Downloader->getFile(); 

connect(downloader, SIGNAL(downloadProgress(qint64,qint64)), pbar, SLOT(setValue(int)));

Если я запускаю свой код, возникает следующая ошибка:

QObject::connect: Incompatible sender/receiver arguments
QNetworkReplyImpl::downloadProgress(qint64,qint64) --> QProgressBar::setValue(int)

Но документы Qt для QNetworkReply говорят:

Этот сигнал подходит для подключения к QProgressBar :: setValue () для обновления QProgressBar, который обеспечивает обратную связь с пользователем.

Что не так с моим кодом и как мне заставить его работать? Я использую Qt 4.5.3 под Linux.

Спасибо за помощь и извините за мой английский!

Ответы [ 2 ]

5 голосов
/ 16 января 2010

Да, правильно, вы должны установить соответствующие аргументы в ваших методах SIGNAL / SLOT ... В любом случае, в примерах и демонстрациях Qt вы можете найти следующий код в примере "FTP-клиент":

connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)), this, SLOT(updateDataTransferProgress(qint64, qint64)));

...

void FtpWindow::updateDataTransferProgress(qint64 readBytes, qint64 totalBytes)
{
    progressDialog->setMaximum(totalBytes);
    progressDialog->setValue(readBytes);
}

Вы можете скопировать эту часть и обновить свой индикатор выполнения таким образом ...

Поэтому я бы предложил:

connect(downloader, SIGNAL(downloadProgress(qint64,qint64)), pbar, SLOT(updateDataTransferProgress(qint64,qint64)));

Надеюсь, это поможет вам!

Подробнее: http://qt.nokia.com/doc/4.6/network-qftp.html

0 голосов
/ 20 сентября 2010

Цитирую документацию:

Исключительно, если сигнал имеет больше параметры, чем слот это подключен к дополнительному параметры просто игнорируются:

connect(ftp,
SIGNAL(rawCommandReply(int, const
QString &)),
        this, SLOT(checkErrorCode(int)));

В вашем случае проблема фактически заключалась в том, что типы параметров не совпадали с qint64! = Int, и невозможно выполнить задачу без оболочки или приведения типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...