C++ 使用Qt通过TagLib获取mp3封面艺术

C++ 使用Qt通过TagLib获取mp3封面艺术,c++,qt,taglib,C++,Qt,Taglib,我正在为我在大学的课程设计制作一个音频播放器。我是一名一年级学生,所以我不是一名专业程序员 我使用的是Qt5.4和QtCreator 3.3.1。我已经包括了bass.dll和TagLib库来处理音频文件。我想做的是获取歌曲的封面艺术,并将其传递给播放器GUI上的QLabel(或任何其他小部件,如果更方便的话)。 我还没有真正弄明白怎么做。我已经寻找了一段时间的例子,但我总是有错误或错误的例子结束。下面是我最后一次尝试使用的代码 TagLib::MPEG::File file(reinterpr

我正在为我在大学的课程设计制作一个音频播放器。我是一名一年级学生,所以我不是一名专业程序员

我使用的是Qt5.4和QtCreator 3.3.1。我已经包括了bass.dll和TagLib库来处理音频文件。我想做的是获取歌曲的封面艺术,并将其传递给播放器GUI上的QLabel(或任何其他小部件,如果更方便的话)。 我还没有真正弄明白怎么做。我已经寻找了一段时间的例子,但我总是有错误或错误的例子结束。下面是我最后一次尝试使用的代码

TagLib::MPEG::File file(reinterpret_cast<const wchar_t*>(curSong->path.constData()));
TagLib::ID3v2::Tag *m_tag = file.ID3v2Tag(true);
TagLib::ID3v2::FrameList frameList = m_tag->frameList("APIC");
   if(frameList.isEmpty()) {
       return QImage();
   }

   TagLib::ID3v2::AttachedPictureFrame *coverImg = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(frameList.front());

   QImage coverQImg;
   coverQImg.loadFromData((const uchar *) coverImg->picture().data(), coverImg->picture().size());

   return coverQImg;
TagLib::MPEG::File文件(重新解释cast(curSong->path.constData());
TagLib::ID3v2::Tag*m_Tag=file.ID3v2Tag(true);
TagLib::ID3v2::框架列表框架列表=m_标记->框架列表(“APIC”);
if(frameList.isEmpty()){
返回QImage();
}
TagLib::ID3v2::AttachedPictureFrame*coverImg=static_cast(frameList.front());
QImage-coverQImg;
coverQImg.loadFromData((const uchar*)coverImg->picture().data(),coverImg->picture().size());
回归方程;
这一个不适用于我,因为它会导致错误,例如

C:\Qt\Projects\audioPlayer\mainwindow.cpp:553: error: undefined reference to `TagLib::List<TagLib::ID3v2::Frame*>::List(TagLib::List<TagLib::ID3v2::Frame*> const&)'
C:\Qt\Projects\audioPlayer\mainwindow.cpp:553:错误:未定义对“TagLib::List::List(TagLib::List const&)”的引用

我想我弄乱了库,但我肯定我已经包括了id3v2frame.h和id3v2tag.h

您可以使用
ffmpeg
探索解决方案

ffmpeg -i input.mp3 -an -vcodec copy cover.jpg

甚至不确定您在哪里找到了
id3v2frame.h
(最新版本附带了
id3v2frame.h
),但是
TagLib::ID3v2::FrameList
id3v2tag.h
中声明了一个印刷错误,fxd。当然是指id3v2。id3v2tag.h也包含在我的项目中。它是否包含在
mainwindow.cpp
mainwindow.h
?在
mainwindow.cpp
中。但是,将它包含在头文件中并没有帮助,因为头文件本身不包含任何TagLib部分。第553行是带有框架列表声明的行taglib头文件有问题。您使用什么taglib版本?