Проблема заключается в том, что в разных местах программы функции, работающие со QString, ведут себя по-разному в отношении обработки кириллицы. Это касается и функции qDebug()
в том числе.
Проиллюстрирую проблему вот таким, утрированным примером. Есть два класса, базовый:
ProcessObject(QString name, QObject *owner = Q_NULLPTR, ConfigurationCache* cache = Q_NULLPTR, QString desc = "")
: DomainModel(name, DomainLevel::Object, owner, cache)
, m_description(desc)
{
qDebug() << "Это конструктор класса ProcessObject";
}
и наследник
#include "ProcessObject.h"
InfoLabel(QString name, QString desc = "", QString vendor = "", QString swrev = "", QString cfgrev = "", QObject *owner = Q_NULLPTR, ConfigurationCache* cache = Q_NULLPTR)
: ProcessObject(name, owner, cache, desc)
, m_vendor(vendor)
, m_softwareRev(swrev)
, m_configRev(cfgrev)
{
qDebug() << "Это конструктор класса InfoLabel";
}
При вызове конструктора класса наследника получаем следующий консольный вывод:
Это конструктор класса ProcessObject
��� ����������� ������ InfoLabel
Мне непонятна причина, по которой два идентичных вызова функции дают разный результат. Прошу сообщество помочь разобраться с этим вопросом.
Подобные проблемы с кодировкой могут быть связаны с тем, что исходники (*.cpp, *.c, .*h) в момент компиляции были в различной кодировке. Всё, что нужно, чтобы устранить данную проблему - единообразно перекодировать все исходники.
В данном случае исходный код класса ProcessObject
находился в кодировке UTF-8, а InfoLabel
- в кодировке, отличной от UTF-8. Это и вызвало разницу в интерпретации кириллического строкового литерала.
Вызвать такую неоднородность, могут самые разные факторы: к примеру, код писался несколькими программистами или в разных IDE. Visual Studio по умолчанию сохраняет файлы в кодировке, соответствующей региональным настройкам операционной системы (для России это CP-1251), в то время как Qt Creator позволяет установить кодировку, используемую по умолчанию.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как объекту класса kvadrat вызвать методы класса rectangle, а потом опять вызывать методы kvadrat??
В таблице базы данных PostgreSQL есть столбец (nodeCoordinates) где хранятся координаты (тип geography)Данный столбец связан с моделью в приложении ASP