I found a solution at https://github.com/ndevenish/Hugin. I have made minor adjustments to run in my Qt environment.
In the header:
static QString getDisplayProfileURL();
typedef struct {
CFUUIDRef dispuuid;
CFURLRef url;
} ColorSyncIteratorData;
static bool colorSyncIterateCallback(CFDictionaryRef dict, void *data);
and source
bool Mac::colorSyncIterateCallback(CFDictionaryRef dict, void *data)
{
ColorSyncIteratorData *iterData = (ColorSyncIteratorData *)data;
CFStringRef str;
CFUUIDRef uuid;
CFBooleanRef iscur;
if (!CFDictionaryGetValueIfPresent(dict, kColorSyncDeviceClass, (const void**)&str))
{
qWarning("kColorSyncDeviceClass failed");
return true;
}
if (!CFEqual(str, kColorSyncDisplayDeviceClass))
{
return true;
}
if (!CFDictionaryGetValueIfPresent(dict, kColorSyncDeviceID, (const void**)&uuid))
{
qWarning("kColorSyncDeviceID failed");
return true;
}
if (!CFEqual(uuid, iterData->dispuuid))
{
return true;
}
if (!CFDictionaryGetValueIfPresent(dict, kColorSyncDeviceProfileIsCurrent, (const void**)&iscur))
{
qWarning("kColorSyncDeviceProfileIsCurrent failed");
return true;
}
if (!CFBooleanGetValue(iscur))
{
return true;
}
if (!CFDictionaryGetValueIfPresent(dict, kColorSyncDeviceProfileURL, (const void**)&(iterData->url)))
{
qWarning("Could not get current profile URL");
return true;
}
CFRetain(iterData->url);
return false;
}
QString Mac::getDisplayProfileURL()
{
ColorSyncIteratorData data;
data.dispuuid = CGDisplayCreateUUIDFromDisplayID(CGMainDisplayID());
data.url = NULL;
ColorSyncIterateDeviceProfiles(colorSyncIterateCallback, (void *)&data);
CFRelease(data.dispuuid);
CFStringRef urlstr = CFURLCopyFileSystemPath(data.url, kCFURLPOSIXPathStyle);
CFRelease(data.url);
return QString::fromCFString(urlstr);
}