Какой формат у семантик с типом значения TDATE, TTIME, TCOLOR ?
В документации написано:
Цитата
Каждая семантика имеет номер, название, тип значения (символьная строка, числовое значение, ссылка на другой объект, код характеристики и т.д.), признак повторяемости, единицу измерения, максимальное и минимальное значения.
В maptype.h :
Код
enum SEMTYPE // ТИПЫ ЗНАЧЕНИЯ СЕМАНТИКИ
{
TUNDEFINED = -1, // Значение не установлено
TSTRING = 0, // Символьная строка
TNUMBER = 1, // Числовое значение
TANYFILE = 9, // Имя файла зарегистрированного типа
TBMPFILE = 10, // Имя файла BMP
TOLEFILE = 11, // Имя файла,обрабатываемого OLE-сервером
TREFER = 12, // Ссылка на произвольный объект карты
// (уникальный номер объекта)
TMAPFILE = 13, // Имя файла-паспорта района
TTXTFILE = 14, // Имя текстового файла
TPCXFILE = 15, // Имя файла PCX
TCODE = 16, // Значение в виде числового кода
// из классификатора значений
TDATE = 17, // Значение даты в числовом виде (ГГГГММДД)
TANGLE = 18, // Угловая величина в радианах
TTIME = 19, // Значение времени в числовом виде (ЧЧММСС)
TFONT = 20, // Имя шрифта ("Arial", "Courier"...)
TCOLOR = 21, // Числовое значение цвета в RGB
TFDIGITAL = 22, // Семантика типа формула числовая (с вычисляемыми значениями)
TFSTRING = 23, // Семантика типа формула символьная (с вычисляемыми значениями)
TLAST = 23, // ВЕРХНЯЯ ГРАНИЦА СПИСКА КОДОВ
TDOCREFMIN = 9, // НИЖНЯЯ ГРАНИЦА ТИПА СЕМАНТИКИ - ССЫЛКА НА ДОКУМЕНТ (ГРАФИЧЕСКИЙ ФАЙЛ, КАРТА)
TDOCREFMAX = 15, // НИЖНЯЯ ГРАНИЦА ТИПА СЕМАНТИКИ - ССЫЛКА НА ДОКУМЕНТ (ГРАФИЧЕСКИЙ ФАЙЛ, КАРТА)
};
TDATE, TTIME - это строка или число?
Если число, значение TTIME 526 - это 0 часов 5 минут 26 секунд? Если строка, то вроде всё понятно.
TCOLOR - это число в формате 0x00BBGGRR ??
Я хочу использовать QDateTime, и для TDATE, TTIME чисел у меня вот такой пример:
Код
#include <QCoreApplication>
#include <QDateTime>
#include <QDebug>
QDateTime calcTime(int someTime){
QString time = QString::number(someTime);
QString ret;
return QDateTime::fromString(ret.fill('0', 6 - time.length()).append(time),
"hhmmss");
}
QDateTime calcDate(int someDate){
QString date = QString::number(someDate);
QString ret;
return QDateTime::fromString(ret.fill('0', 8 - date.length()).append(date),
"yyyyMMdd");
}
int calcSemanticDate(const QDateTime& d){
return d.toString("yyyyMMdd").toInt();
}
int calcSemanticTime(const QDateTime& d){
return d.toString("hhmmss").toInt();
}
int main()
{
//получение QDateTime из значения семантики
qDebug() << calcTime(526).toString("hhmmss");
//получение из QDateTime значения для семантики TTIME
qDebug() << calcSemanticTime(calcTime(526));
//получение QDateTime из значение семантики
qDebug() << calcDate(21225).toString("yyyyMMdd");
//получение из QDateTime значения семантики TDATE
qDebug() << calcSemanticDate(calcDate(21225));
return 0;
}
В примере совсем не разобрался, но в описании перечесления указано как хранятся данные: TDATE = 17, // Значение даты в числовом виде (ГГГГММДД) TTIME = 19, // Значение времени в числовом виде (ЧЧММСС) TCOLOR = 21, // Числовое значение цвета в RGB
То есть это число(int), которое анализируется как 0dYYYYMMDD для TDATE, 0d00HHMMSS для TTIME и 0x00BBGGRR для TCOLOR Если эту семантику выводить в строку, то можно анализировать строку, вроде это и делается в примере.
Получается значение времени 0 часов 5 минут 26 секунд будет числом 526, значение даты 25 декабря второго года будет 21225, функции из примера могут превращать такие числа в QDateTime и обратно из QDateTime в значения TDATE и TTIME.
Чтобы использовать QColor для TCOLOR понадобится менять порядок байт, пример:
С датами и временем так. С цветом не вижу разницы с предыдущим примером)) Тут же нет взаимодействия с MAPAPI, поэтому трудно что-то сказать) Возможно там все же 0xAARRGGBB, но стандартно в ядре используется 0xAABBGGRR
То есть там ещё и альфа есть ? В maptype.h написано RGB, и ни слова про альфу. Пойду всё таки найду какие-нибудь объекты на картах с такими семантиками и посмотрю.
Альфу я привел просто для понимания порядка байт, потому что сам долго не мог понять, что RGB в понимании MAPAPI это 0x00BBGGRR, ведь в памяти(RAM в формате Intel) будет лежать как RRGGBB00, отсюда и RGB У нас альфа-канал не учитывается