源文件目录下
//PRO文件
#利用sqlite3数据库操作,将gbk码转换成unicode码
#KAKASI2014-6-29QT+=\
widgets\
testlibHEADERS+=\
QMediaInfo.h\
QUnitTest.hSOURCES+=\
test.cpp\
QMediaInfo.cpp\
QUnitTest.cppLIBS+=D:\QTPractice\mediainfo\sqlite3.lib//QMEDIAINFO。h
/*
功能:封装MediaInfodll功能
KAKASI 2014-6-29
*/
#define _UNICODE
#ifndef QMEDIAINFO_H
#define QMEDIAINFO_H
#include "MediaInfoDLL.h"
#include <QString>
class QMediaInfo
{
public:QMediaInfo(QString &fileName);~QMediaInfo();QString getInfo(QString str,bool willConvert = false) const;template<typename T>static void d(T t, bool b=false);
private:MediaInfoDLL::MediaInfo *MI;
};
#endif // QMEDIAINFO_H
//.CPP文件
#include "QMediaInfo.h"
#include <QDebug>
#include <QFileInfo>
#include "sqlite3.h"
#include "getGBK.h"
#include <QMessageBox>
bool isExist(QString fileName)
{QFileInfo info(fileName);return info.exists();
}
template<typename T>
void QMediaInfo::d(T t, bool b)
{//return;if (b)qDebug() << hex << t;elseqDebug() << t;
}
QMediaInfo::QMediaInfo(QString &fileName)
{using namespace MediaInfoDLL;MI = new MediaInfo;if(MI->IsReady())d("MI is READY");if(isExist("MediaInfo.dll"))d("mediainfo.dll is exist");if(isExist(fileName))d(fileName + " is exist");//can not use (LPCWSTR)"shui2.mp3"const String name = fileName.toStdWString();size_t b = MI->Open(name);if(b == 0)d(fileName + " is not opened");if(b == 1){d(fileName + " is opened");}
}
//功能,接受一个QString,将其转换下GBK->UNICODE
QString convert(QString str)
{//gbk -> unicode//std::string unicode[6] = {"4e2d","6587","4eca","751f","4eca","4e16"};//getString(unicode,6,false);//CDC0,BAE9,B8D5//gbk 中文从81e0开始QString temp = str;QString res="";QString uniRes="";for (int i = 0; i < temp.length(); ++i){QChar ch = temp.at(i);  //cdQString strs="";strs.setNum(ch.unicode(),16);//205res.append(strs);}//QMediaInfo::d(res);//每次读取1个,如果大于81,从读取2个,查找替换QString perStr=res.mid(0,2);int l = res.length();bool b;std::string s[1];std::string r;for(int pos = 0; pos < l;){//QMediaInfo::d("next 2 "+perStr);if (perStr.toInt(&b,16) >= 0x81){perStr=res.mid(pos,4);//QMediaInfo::d(" 4 "+perStr);pos += 4;//转换s[0]= perStr.toStdString();r = getString("code.db",s,1,false);//QMediaInfo::d(QString::fromStdString(r));QString temp = "0x"+ QString::fromStdString(r);QChar tmp = temp.toInt(&b,16);//QMediaInfo::d(tmp);uniRes.append(tmp);res.replace(perStr,QString::fromStdString(r));}else{QChar tmp = perStr.toInt(&b,16);uniRes.append(tmp);pos += 2;}//读取下一个if (pos + 2 <= l){perStr=res.mid(pos,2);}}//QMediaInfo::d(res);//QMediaInfo::d(uniRes);//QChar ss = 0x5c60;//QMediaInfo::d(ss);return uniRes;
}
QString QMediaInfo::getInfo(QString str, bool willConvert) const
{using namespace MediaInfoDLL;QString temp;QString tmp(str);String all = MI->Get(Stream_General,0,tmp.toStdWString());if (str.toUpper() == "ALL")all = MI->Inform();temp = QString::fromStdWString(all);if (willConvert)temp = convert(temp);return temp;
}
QMediaInfo::~QMediaInfo()
{MI->Close();delete MI;MI = 0;
}
//测试文件
#include <QtWidgets/QApplication>
#include "QMediaInfo.h"
int main(int argc, char *argv[])
{QApplication app(argc, argv);QString fileName = "bw.mp3";QMediaInfo info(fileName);//info.getAll();QMediaInfo::d(info.getInfo("Performer",true));QMediaInfo::d(info.getInfo("Title",true));QMediaInfo::d(info.getInfo("BitRate"));QMediaInfo::d(info.getInfo("Duration"));//QMediaInfo::d(info.getInfo("All"));return app.exec();
}
//单元测试文件.h
#ifndef QUNITTEST_H
#define QUNITTEST_H
#include <QObject>
#include "QMediaInfo.h"
class QUnitTest : public QObject
{Q_OBJECT
public:QUnitTest();
private Q_SLOTS:void initTestCase();void cleanupTestCase();void testCase1();void testCase1_data();
};
#endif // QUNITTEST_H//单元测试文件.cpp
#include <QString>
#include <QtTest>
#include <QObject>
#include <QDebug>
#include "QUnitTest.h"
QUnitTest::QUnitTest(){}
void QUnitTest::initTestCase(){}
void QUnitTest::cleanupTestCase(){}
void QUnitTest::testCase1()
{//TestClass p;//QVERIFY(p.Sun() == 0);//above two lines is right without _data function//QString& getInfo("Performer",true)QString fileName = "bw.mp3";//D:/音乐/霸王别姬.mp3";QMediaInfo info(fileName);QFETCH(QString, a);QFETCH(bool ,   b);QFETCH(QString, result);QCOMPARE(info.getInfo(a,b), result);
}
void QUnitTest::testCase1_data()
{QTest::addColumn<QString>("a");QTest::addColumn<bool>("b");QTest::addColumn<QString>("result");QTest::newRow("0") <<"BitRate"<<false<<"56000";QTest::newRow("1") <<"Performer"<<true<<"屠洪刚";QTest::newRow("2") <<"Title"<<true<<"霸王别姬";
}
//QTEST_MAIN(QUnitTest)

QT 利用slite3和mediainfodll类获取多媒体标签相关推荐

  1. Qt使用QMediaPlayer类获取多媒体信息

    Qt自带的库中能达到获取多媒体信息效果的看来看去好像只有QMediaPlayer能达到这个效果,虽然看起来有些笨. void Player::OnMetaDataAvailableChanged(bo ...

  2. python tag对象下有多个标签、属性_Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释...

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 如何利用Python爬虫库BeautifulSoup获取对象(标签) ...

  3. 微信:获取单个标签所有人

    前言 实际业务场景可能需要一个标签下的所有人,做一些指定操作,所以出一个工具类获取所有标签下的人 代码 @Autowiredprivate RestTemplate restTemplate;priv ...

  4. Qt实战案例(41)——利用QWinTaskbarButton和QWinTaskbarProgress类实现任务栏进度条的显示

    目录 一.项目介绍 二.项目基本配置 三.UI界面设置 四.主程序实现 4.1 pro文件 4.2 widget.h头文件 4.3 widget.cpp源文件 五.效果演示 一.项目介绍 任务栏进度条 ...

  5. VC++中使用使用winnet类获取网页内容

    2005-09-01 VC++中使用使用winnet类获取网页内容 - [VC专栏] 微软提供的Winnet类是一个应用层的网络通信组件, 它可以使你的应用程序很容易的实现http.ftp.gophe ...

  6. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

  7. VC++ 从View类获取各种指针编程实例

    新建一个多文档工程:名为GetPtrDemo: 在视类OnDraw函数,获取其他类指针:然后进行一些操作: 首先获取应用程序类指针:可以获取到:然后利用它输出程序名: CGetPtrDemoApp* ...

  8. Qt中的自定义模型类

    文章目录 1 Qt中的通用模型类 1.1 Qt中的通用模型类 1.2 Qt中的变体类型QVariant 2 自定义模型类 2.1 自定义模型类设计分析 2.2 自定义模型类数据层.数据表示层.数据组织 ...

  9. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

最新文章

  1. Luogu P5556 圣剑护符(线性基,树链剖分,线段树)
  2. 如何区分直连串口线和交叉串口线?
  3. MYSQL 索引相关
  4. python算法与数据结构-希尔排序算法(35)
  5. java怎么获取传入路径_java如何获取jsp页面上传的文件路径
  6. Go语言vscode环境配置
  7. 信息学奥赛一本通C++语言——1018: 其他数据类型存储空间大小
  8. asp.net中有关URL的信息
  9. anaconda3 安装tensorflow 报Cannot remove entries fro
  10. PS教程:如何批量处理图片
  11. html 写字版插件,JS+HTML5 Canvas实现简单的写字板功能示例
  12. vmware的原理和影子页表
  13. Fresco 5.0以上内存持续增长问题优化
  14. 12 序列化器Serializer的使用
  15. 卡方检验四格表怎么做_运用SPSS进行医学诊断数据的Kappa一致性检验 ——【杏花开医学统计】...
  16. 用HTML写手机QQ登录界面
  17. pic16f1829 c语言,PIC16F1829 TIMER2初始化程序及应用
  18. 使用pca进行坐标系转换、降维
  19. 什么是迭代式项目开发
  20. phython在file同时写入两个_Flink集成数据湖之实时数据写入iceberg

热门文章

  1. Outlook客户端添加新邮箱的一些经验
  2. cityscapes数据集标签的处理
  3. 北大计算机结构专业排名,中国大学专业排名出炉,涵盖509个专业,北大A+专业数遥遥领先...
  4. 你所不知道的几个QQ空间技巧大全
  5. 毕玄:我在阿里的十年技术感悟
  6. 学分绩点计算器java_学分绩点计算器
  7. Windows系统下安装CentOS
  8. 2022年安全员-A证特种作业证考试题库及答案
  9. 百度API实现人流量数量检测(动态)
  10. 著名杀毒网站 江民再次被黑