Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从vlc媒体播放器源代码使用QNetworkAccessManager_C++_Qt4_Vlc - Fatal编程技术网

C++ 如何从vlc媒体播放器源代码使用QNetworkAccessManager

C++ 如何从vlc媒体播放器源代码使用QNetworkAccessManager,c++,qt4,vlc,C++,Qt4,Vlc,我正在定制vlc源代码,需要从QtOpenDialog(vlc的QtUI对话框的一部分)使用QNetworkAccessManager 我正在尝试使用代码示例 void MainWindow::requestShowPage(){ QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(r

我正在定制vlc源代码,需要从QtOpenDialog(vlc的QtUI对话框的一部分)使用QNetworkAccessManager

我正在尝试使用代码示例

void MainWindow::requestShowPage(){
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestReceived(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://google.com")));
}

void MainWindow::requestReceived(QNetworkReply* reply){
    QString replyText;
    replyText.fromAscii(reply->readAll());
    ui->txt_debug->appendPlainText(replyText);
}
我的主要问题是,即使有如下单个调用,vlc也无法加载UI:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
以下是vlc控制台上产生的输出

./vlc
[0x19c9388] main libvlc: Running app with the default interface. 
[0x1f82988] main interface error: corrupt module: /VLC/vlc-2.0.4/modules/gui/qt4/.libs/libqt4_plugin.so
[0x2586748] main generic error: corrupt module: /VLC/vlc-2.0.4/modules/gui/qt4/.libs/libqt4_plugin.so
[0x1f82988] skins2 interface error: no suitable dialogs provider found (hint: compile the qt4 plugin, and make sure it is loaded properly)
[0x1f82988] skins2 interface error: cannot instantiate qt4 dialogs provider
[0x1f82988] [cli] lua interface: Listening on host "*console".
只要省略QNetworkAccessManager,UI就会再次出现

a。QNetworkAccessManager使用场景是否有什么特别之处,即是否应在全局范围内创建?我查看了它的文档,但没有发现任何东西

b。关于Qt或它与VLC的使用是否有我遗漏的特殊约定?我对c/c++和Linux有丰富的经验,但对QT还不熟悉

更新1:我也看到了,它基本上是在尝试使用QNetworkAccessManager执行相同的httpget。然而,我相信调用这个简单的api不需要作为一个单独的模块来完成(这个问题试图编写一个新模块)?或者qt/vlc中是否存在此类限制

UPDATE2:到目前为止,我怀疑它与向vlc qt ui部分添加新类有关。我尝试将qt安装时附带的http示例包含在vlc中,但看到了相同的行为。任何关于在vlc ui组件中包含.cpp和.h的指导原则都会有所帮助

更新3:我按照下面答案中的建议进行了操作,似乎无法理解以下编译错误。有人能帮忙吗

/usr/include/qt4/QtCore/qobject.h: In copy constructor ‘QNetworkAccessManager::QNetworkAccessManager(const QNetworkAccessManager&)’:
/usr/include/qt4/QtCore/qobject.h:333:5: error: ‘QObject::QObject(const QObject&)’ is private
In file included from /usr/include/qt4/QtNetwork/QNetworkAccessManager:1:0,
                 from qt4.hpp:39,
                 from qt4.cpp:37:
/usr/include/qt4/QtNetwork/qnetworkaccessmanager.h:72:24: error: within this context
qt4.cpp: At global scope:
qt4.cpp:192:63: note: synthesized method ‘QNetworkAccessManager::QNetworkAccessManager(const QNetworkAccessManager&)’ first required here 
In file included from qt4.cpp:54:0:
============

qt4.hpp在全局范围内添加了以下内容

#include <QNetworkAccessManager>
extern QNetworkAccessManager NETWORK_MANAGER;
QNetworkAccessManager NETWORK_MANAGER = QNetworkAccessManager();
然后我访问qt4的一个子类

QNetworkAccessManager * qnam = &NETWORK_MANAGER;

更新4我还发现手动将QtNetwork包含到make文件中也是有问题的(尽管它在编译头时没有抱怨),并且vlc ui无法加载。然而,当我将其添加到主vlc配置文件时,甚至QNetworkAccessManager的基本本地创建也起到了作用。有关详细信息,请参见应全局创建
QNetworkAccessManager
。如果在类或方法中创建它,它将与对象(或方法)一起销毁,并且发送的请求将丢失。此外,我已经在程序中遇到了几个
QNetworkAccessManager
s问题,因此我建议您执行以下操作:

a_module.hpp:

// ...

#ifndef THE_MODULE
#define THE_MODULE

// ...

#include <QNetworkAccessManager>

// ...

extern QNetworkAccessManager NETWORK_MANAGER;

// ...

#endif    // THE_MODULE
在代码中:

// ...

#include "a_module.hpp"

// ...

QNetworkAccessManager * qnam = &NETWORK_MANAGER;

// ...

编辑:如果不起作用(参见问题中的更新3),请尝试
QNetworkAccessManager网络管理器
而不是
QNetworkAccessManager NETWORK\u MANAGER=QNetworkAccessManager()
a_module.cpp
中。这是由于编译器造成的。与MSVC不同,g++使用
QNetworkAccessManager-NETWORK\u-MANAGER编译但不是
QNetworkAccessManager网络\u MANAGER=QNetworkAccessManager()

VLC可能无法正确使用Qt主循环-尽管我不能肯定地断言这一点。如果同步正常,您可以尝试使用QMainLoop并将
finished
挂接到主循环的
quit
。谢谢,否则VLC代码可能无法正确使用它?但是还有很多其他稳定工作的对话。即使我忽略已完成的事件,只在某个打开对话框的方法中包含一行新的QNetworkAccessManager,它也会失败。。。VLC是否已经在其他地方创建了QNetworkAccessManager?我马上就要检查Qt信号源了,我想没有。未通过grep/search找到任何事件,并且必须修改make文件,即添加QtNetwork模块。默认情况下,其他包括QtGui、core等。谢谢。我会尝试一下,然后回来。我在我的代码中使用了它,并且得到了一些到目前为止我还不完全理解的编译错误。我在问题的更新中添加了详细信息。如果你能帮忙,我将不胜感激。Thanks@fayyazkl:您使用哪种编译器?g++?MSVC?另一个?看看我为这个做的编辑。使用g++。我将尝试一下,并让您知道谢谢我还找到了将QNewtorkAccessManager包含到vlc源代码中的正确方法。更新成问题
// ...

#include "a_module.hpp"

// ...

QNetworkAccessManager * qnam = &NETWORK_MANAGER;

// ...