C++ Qt5视频播放器QT多媒体QGraphics视频项目

C++ Qt5视频播放器QT多媒体QGraphics视频项目,c++,qt,qt5,C++,Qt,Qt5,嘿,stackies目前正在尝试创建一些基本代码,只播放本地源的视频文件(尝试使其工作,然后尝试实现rtsp)。下面是我当前的代码。如果有人能告诉我哪里出了问题,那就太好了 当前代码因错误而失败 C:\Qt\Qt5.1.0\5.1.0\msvc2010\U opengl\examples\multimediawidgets\VideographicsSitem\main.cpp:58:错误:C2664:“QGraphicscenScene::addItem”:无法将参数1从“QGraphicsV

嘿,stackies目前正在尝试创建一些基本代码,只播放本地源的视频文件(尝试使其工作,然后尝试实现rtsp)。下面是我当前的代码。如果有人能告诉我哪里出了问题,那就太好了

当前代码因错误而失败

C:\Qt\Qt5.1.0\5.1.0\msvc2010\U opengl\examples\multimediawidgets\VideographicsSitem\main.cpp:58:错误:C2664:“QGraphicscenScene::addItem”:无法将参数1从“QGraphicsVideoItem*”转换为“QGraphicsSitem*” 指向的类型是不相关的;转换需要重新解释转换、C样式转换或函数样式转换

我想我必须对插入additem的变量进行类型转换。但是,我不知道如何使用两个QClass实现这一点。如果有人有一个基本播放器的例子,它只包含一个视频帧并在你启动程序的第二秒播放(最好连播放按钮都没有)。如果有人有这样的事情,请让我知道,这将使我的生活更容易。 Main.cpp

也刚刚试过这个

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMediaPlayer media;
const QString file = "C:/Users/nick.herniman/Downloads/big_buck_bunny_1080p_h264.mov";
QUrl url(QFileInfo(file).absoluteFilePath());
media.setMedia(url);
media.play();
return a.exec();
}

它可以工作,但只播放文件的音频任何人都知道我在这里做错了什么(它需要在gui窗口中,还是我可以在控制台应用程序中这样做)?

QT文档说明了一个非常类似的示例(),而对象实际上并不相关,这真的很奇怪。除此之外,由于我已经有一段时间没有使用QT,所以只需查看QT文档—创建一个虚拟的
QGraphicsSitem
,将其设置为
QGraphicsVideoItem
的父项,然后将该虚拟项添加到场景帮助中,是否有帮助?我猜会是这样的

QGraphicsItem* dummy = new QGraphicsItem;
item = new QGraphicsVideoItem(dummy);
graphicsView->scene()->addItem(dummy);
没有什么奇怪的。:-)

当编译器知道
QGraphicsVideoItem
QGraphicsItem
时,它会有所帮助。为了让编译器知道这一点,应该存在
#include


我明白了,你在Videoplayer.cpp中有它。但是main.cpp只看到声明了一个类
QGraphicsVideoItem
。你做了一个很好的远期申报。但这门课是什么。。。无法知道main.cpp中的编译器。添加
#将
包含到main.cpp中。

在Qt5中尝试以下最简单的示例:

QMediaPlayer *mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface);
QGraphicsVideoItem *videoItem = new QGraphicsVideoItem;
videoItem->setPos(100,100);
QGraphicsScene *scene = new QGraphicsScene(this);
ui->GV_VideoPlayer->setScene(scene);
scene->addItem(videoItem);
QString fileName = "/root/sampleVideos/videoplayback.mp4";
if(!fileName.isEmpty())
{
    mediaPlayer->setMedia(QUrl::fromLocalFile(fileName));
}
mediaPlayer->play();
mediaPlayer->setVideoOutput(videoItem);

啊,错过了QGraphicsVideoItem多傻啊:P.给你一个想法,你只需要一个基本的视频播放器,可以通过播放/暂停按钮播放,也可以直接播放。我发现的另一个例子是,它只输出音频,所以我不确定从这里到哪里去。为了让你知道,一旦我这样做了,我会得到大量的错误。与未解析的外部符号相关,或者我想从.cpp文件中使用的是play/pause函数,其余的我都不关心,尝试注释其余部分,遗憾的是它编译了,但程序意外完成(删除对未解析的外部符号函数的任何引用,我不使用).但是如果你能看看我刚刚上传的一个更基本的播放器的代码,告诉我为什么没有视频那就太好了。我回答了你的问题。不要在评论中插入新问题。如果您还有其他问题,请问另一个问题。@Greenflow,出于好奇,因为我手头没有Qt版本,
QGraphicsVideoItem
doc页面没有说它继承自
QGraphicsSitem
,也没有说
QGraphicsVideoItem
页面继承自它,但它们仍然是相关的?哈,这可能会,但到那时我真的不知道我在做什么:D.只是寻找播放视频的最基本的例子,正如你在我的文章底部看到的,我们能够创建一个控制台应用程序,播放视频的声音,而不是视频,有什么建议吗?非常感谢!。这真的帮了我很大的忙D
TEMPLATE = app
TARGET = videographicsitem

QT += multimedia multimediawidgets

HEADERS   += videoplayer.h

SOURCES   += main.cpp \
         videoplayer.cpp

target.path = $$[QT_INSTALL_EXAMPLES]/multimediawidgets/videographicsitem
INSTALLS += target

QT+=widgets
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMediaPlayer media;
const QString file = "C:/Users/nick.herniman/Downloads/big_buck_bunny_1080p_h264.mov";
QUrl url(QFileInfo(file).absoluteFilePath());
media.setMedia(url);
media.play();
return a.exec();
}
QGraphicsItem* dummy = new QGraphicsItem;
item = new QGraphicsVideoItem(dummy);
graphicsView->scene()->addItem(dummy);
QMediaPlayer *mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface);
QGraphicsVideoItem *videoItem = new QGraphicsVideoItem;
videoItem->setPos(100,100);
QGraphicsScene *scene = new QGraphicsScene(this);
ui->GV_VideoPlayer->setScene(scene);
scene->addItem(videoItem);
QString fileName = "/root/sampleVideos/videoplayback.mp4";
if(!fileName.isEmpty())
{
    mediaPlayer->setMedia(QUrl::fromLocalFile(fileName));
}
mediaPlayer->play();
mediaPlayer->setVideoOutput(videoItem);