首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QProgressbar和QNetworkReply信号

QProgressbar和QNetworkReply信号
EN

Stack Overflow用户
提问于 2010-01-16 12:23:35
回答 2查看 3.5K关注 0票数 0

我正在用Qt用C++编写一个应用程序。它应该通过http下载一个文件,并用QProgressbar显示下载进度--但是我不能让这个部分工作!

样本代码:

代码语言:javascript
复制
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)));

如果我运行我的代码,会发生以下错误:

代码语言:javascript
复制
QObject::connect: Incompatible sender/receiver arguments
QNetworkReplyImpl::downloadProgress(qint64,qint64) --> QProgressBar::setValue(int)

但是用于QNetworkReply的Qt文档说:

此信号适合连接到QProgressBar::setValue()以更新提供用户反馈的QProgressBar。

我的代码有什么问题,我如何让它工作?我正在Linux下运行QT4.5.3。

谢谢你的帮助,为我的英语道歉!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-16 13:36:35

是的,没错,你必须在信号/插槽方法中设置匹配的参数.无论如何,在Qt示例和Demos中,您可以在示例"FTP客户端“中找到以下代码:

代码语言:javascript
复制
connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)), this, SLOT(updateDataTransferProgress(qint64, qint64)));

..。

代码语言:javascript
复制
void FtpWindow::updateDataTransferProgress(qint64 readBytes, qint64 totalBytes)
{
    progressDialog->setMaximum(totalBytes);
    progressDialog->setValue(readBytes);
}

你可以复制这部分然后用这种方式更新你的进度条..。

因此,我建议:

代码语言:javascript
复制
connect(downloader, SIGNAL(downloadProgress(qint64,qint64)), pbar, SLOT(updateDataTransferProgress(qint64,qint64)));

我希望它能帮到你!

更多信息:http://qt.nokia.com/doc/4.6/network-qftp.html

票数 5
EN

Stack Overflow用户

发布于 2010-09-19 22:09:23

我引用下列文件:

在特殊情况下,如果信号的参数比连接到的时隙多,则只需忽略附加参数:

代码语言:javascript
复制
connect(ftp,
SIGNAL(rawCommandReply(int, const
QString &)),
        this, SLOT(checkErrorCode(int)));

在您的例子中,问题实际上是自qint64 != int以来参数类型不匹配,没有包装器或类型强制转换是不可能完成任务的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2077303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档