首页 > 解决方案 > 在 Qt5 中使用 QMediaPlayer 播放流时使用代理?

问题描述

我想在代理服务器后面使用 QMediaPlayer 在 QT5 上播放 webradio 流。

我尝试使用以下解决方案:

如何使代理在 Qt5 中与 QMediaPlayer 一起工作?

但是 QNetworkReply 不是从 QIODevice 派生的,因此它不会编译。

我已经阅读了文档,进行了很多搜索,但没有找到解决方案。

编辑:添加一个最小的可重现示例:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkProxy proxy;
manager->setProxy(proxy);

QNetworkReply *reply = manager -> get(QNetworkRequest( QUrl()));
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QMediaContent(), reply);

编译器说:

没有已知的参数 2 从 'QNetworkReply*' 到 'QIODevice*' 的转换</p>

编辑:

在 QNetworkReply 的 QT 来源中,我发现:

class QNetworkReplyPrivate; 
class Q_NETWORK_EXPORT QNetworkReply: public QIODevice

但是为什么向上转换到 QIODevice 不起作用?如果我尝试进行强制转换,编译器会说:

错误:不能 dynamic_cast 'reply'(类型为 'class QNetworkReply*')类型为 'class QIODevice*'(源是指向不完整类型的指针)

标签: c++qt5qmediaplayer

解决方案


感谢您的帮助!

我“只”忘记了包含 QNetworkReply。包括它对我有用

#include <QNetworkAccessManager>
#include <QNetworkProxy>
#include <QNetworkReply>

数小时的故障排除和解决方案非常简单:)


推荐阅读