Подкласс QTextCodec - как зарегистрировать мой кодек
Мне нужно создать свой собственный кодек, то есть подкласс QTextCodec
, И я хотел бы использовать его через QTextCodec::codecForName("myname");
Однако просто подкласса недостаточно. QTextCodec::availableCodecs()
не содержит моего имени кодека.
Документация QTextCodec не охватывает область правильной регистрации пользовательского кодека:
Создание собственного класса кодеков
Поддержка новых текстовых кодировок может быть добавлена в Qt путем создания подклассов QTextCodec.
Чистые виртуальные функции описывают кодировщик системы, и кодер используется в соответствии с требованиями в различных форматах текстовых файлов, поддерживаемых QTextStream, и в X11 для ввода и вывода символов, специфичных для локали.
Чтобы добавить поддержку другой кодировки в Qt, создайте подкласс QTextCodec и реализуйте функции, перечисленные в таблице ниже.
название()
(псевдонимы)
mibEnum ()
convertToUnicode()
convertFromUnicode()Возможно, вам будет удобнее сделать ваш класс кодека доступным в качестве плагина; смотрите Как создавать плагины Qt для деталей.
Итак, я попытался немного покопаться в направлении плагинов. Но я не хочу иметь отдельный проект с плагином. Можно ли объявить плагин в рамках одного проекта?
Или есть прямой способ регистрации моего кодека в QTextCodec? Это предпочтительнее.
1 ответ
Согласно 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 вернул указатель на мой класс кодеков
надеюсь, что это помогает, привет