c++ - 如何很好地将 "cast"qint64 转换为 QProgressBar 的 int

标签 c++ qt qt4 integer-overflow

我正在使用 QFtp(是的..我知道)并且一切正常。

使用他们自己示例中的代码作为指导。

http://doc.qt.io/archives/qt-4.7/network-qftp-ftpwindow-cpp.html

我遇到的唯一问题是在发送(或接收)大文件(比如 3 GB)时进度条出现故障。

这是由于从 qint64 到 int 的转换:

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

我想知道在谷歌搜索大约一个小时并通过确保我不会超出范围来保持它的“安全”之后,最好的处理方法是什么。

while (totalBytes > 4294967295UL)
{ 
   totalBytes = totalBytes/4294967295UL;
   readBytes = readBytes/4294967295UL;
}

但这“感觉”不对。 .

最佳答案

您可以让进度条以百分比形式显示进度:

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

关于c++ - 如何很好地将 "cast"qint64 转换为 QProgressBar 的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4931780/

相关文章:

python - 将项目添加到标准 QWebView 上下文菜单

c++ - 在 Mac OS X 上使用 ffmpeg 和 Qt

c++ - 正如 Clang 似乎表明的那样,这段代码真的是未定义的吗?

c++ - 为什么 Qt 拒绝有效的 JSON?

Qt 信号与槽

linux - QTableWidget 在删除多行时崩溃

c++ - std::vector erase() 没有按预期工作

c++ - QT - 在 pro 中指定 DLL 路径。文件

python - 在我的 tablewidget 中添加一个组合框

c++ - 在 QTableWidget 中选择 QComboBox