我正在使用Qt Framework用C ++编写应用程序。 它应该通过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)
但是the Qt docs for QNetworkReply说:
此信号适合连接到QProgressBar :: setValue()以更新提供用户反馈的QProgressBar。
我的代码有什么问题,如何让它运行? 我在Linux下运行Qt 4.5.3。
感谢您的帮助,对不起我的英语!
答案 0 :(得分:5)
是的,它是正确的,您必须在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)));
我希望它可以帮到你!
答案 1 :(得分:0)
我引用文档:
特殊情况下,如果信号有更多 它比槽的参数 连接,附加 简单地忽略参数:
connect(ftp,
SIGNAL(rawCommandReply(int, const
QString &)),
this, SLOT(checkErrorCode(int)));
在你的情况下,问题实际上是参数类型与qint64!= int不匹配,如果没有包装器或类型转换,就不可能完成任务。