我有一个下载急流文件的函数。我需要在一个独立于GUI线程的线程中下载急流,所以我使用了QtConcurrent::run在另一个线程中启动下载,但是我在一个对话框中启动了下载,并且在下载开始后对话框立即关闭,并且(我对qt还不熟悉,所以我认为)关闭对话框,对话框对象被删除,对话框QFuture和QFutureWatcher也被删除,而且由于QFutureWatcher不再存在,它不会发出已完成的信号。有人能告诉我如何解决这个问题,如果我上面写的是真的吗?
下面是启动下载所用的代码:
mainwindow.cpp
void MainWindow::on_downloadButton_clicked {
DownloadDialog ddl_dial;
ddl_dial.exec();
}downloaddiaolg.cpp
on_finishButton_clicked() {
TorrentDDL tddl;
QFutureWatcher<void> *watcher = new QFutureWatcher<void>;
QFuture<void> tddl_thread = QtConcurrent::run(&TorrentDDL::download,
&tddl, magnet_str_url, file_path);
watcher->setFuture(tddl_thread);
close();
}发布于 2022-04-24 10:58:47
对话框被删除,因为它超出了作用域,因为它是在堆栈上实例化的。使用堆。
DownloadDialog* ddl_dial = new DownloadDialog(this);
ddl_dial->exec();不要忘记在某个时候删除它,以避免内存泄漏。
https://stackoverflow.com/questions/71981096
复制相似问题