我需要创建自己的编解码器,即QTextCodec
的子类。我想通过QTextCodec::codecForName("myname");
来使用它
但是,只是子类是不够的。 QTextCodec::availableCodecs()
不包含我的编解码器名称。
QTextCodec文档未涵盖自定义编解码器的正确注册区域:
创建自己的编解码器类
支持新的文本编码即可 通过创建QTextCodec添加到Qt 子类。
纯虚函数描述 编码器到系统和 编码器按照要求使用 支持不同的文本文件格式 通过QTextStream,在X11下,用于 特定于语言环境的字符输入和 输出
添加对其他编码的支持 Qt,创建QTextCodec的子类 实现中列出的功能 下表。
名称()
别名()
mibEnum()
convertToUnicode()
convertFromUnicode()你可能会发现它更方便 使您的编解码器类可用作 插入;请参阅如何创建Qt插件 详情。
所以,我试图深入了解插件的方向。但我不希望有一个单独的插件项目。是否可以在同一个项目中声明插件?
或者有没有直接的方法将我的编解码器注册到QTextCodec?这是首选。
答案 0 :(得分:4)
根据qtextcodex.cpp,任何新的编解码器都由自己的构造函数添加到已注册的编解码器集合(* static QList all )。因此,创建一个编解码器类的实例应该可以解决问题;下面的代码对我来说很好:
QMyCodec myCodec;
foreach (QByteArray codecName, QTextCodec::availableCodecs())
{
QString codecNameStr(codecName);
qDebug() << codecNameStr;
}
QTextCodec* codec = QTextCodec::codecForName("MyNewCodec");
if (codec)
{
qDebug() << "found ";
qDebug() << codec->name() << '\n';
}
返回QTextCodec :: availableCodecs:
“MyNewCodec”
“系统”
“ROMAN8” “HP-ROMAN8”
“csHPRoman8”......
QTextCodec :: codecForName返回指向我的编解码器类的指针
希望这有帮助,尊重