从https://taglib.github.io/下载了标记库1.9,并按照安装文件中提供的说明进行了编译。
下面的代码崩溃,并显示错误"The program has unexpectedly“。
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <taglib/mp4file.h>
#include <taglib/mpegfile.h>
#include <taglib/fileref.h>
#include <taglib/taglib.h>
#include <taglib/tag.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TagLib::FileName fn(QString("C:/Users/Bill/Desktop/02 Am I Wrong.mp3").toStdString().c_str());
TagLib::FileRef ref(fn);
qDebug() << QString::fromStdString(std::string(ref.tag()->artist().toCString()));
return a.exec();
}在调试模式下运行时在以下位置显示空的取消引用fileref.cpp
bool FileRef::isNull() const
{
return !d->file || !d->file->isValid();
}使用静态构建的Qt 5.0.2运行Windows 10内部预览版
我辛勤地工作,却没有发现任何有用的结果。
发布于 2015-07-23 05:32:34
只有在QString对象仍处于活动状态时,QString.toStdString()..c_str()返回的指针才有效。在您的例子中,这只在您创建它的那一行上。
因此,要么保留对QString的引用,要么根本不使用QString。
TagLib::FileRef ref("C:/Users/Bill/Desktop/02 Am I Wrong.mp3");
qDebug() << ref.tag()->artist().toCString();此外,您应该添加一些错误检查。下面是一个不使用qt的示例:
#include <taglib/fileref.h>
#include <taglib/taglib.h>
#include <taglib/tag.h>
int main(int argc, char *argv[])
{
TagLib::FileRef ref("./Falco Benz - Hat Tricks (Original Mix).mp3");
if(!ref.isNull() && ref.tag() != NULL) {
std::cout << ref.tag()->artist().toCString() << std::endl;
}
}如果我省略了错误检查,并且该文件不存在,我会得到一个段错误。
https://stackoverflow.com/questions/31564939
复制相似问题