Подитожу: Вход QColor с альфа каналом, выход темный цвет или светлый.
Если сложно изъясняюсь, нужна функция: bool isDarkColor(const QColor&)
Почему бы не попробовать банальный перевод в greyscale (коэффициенты примерно такие)
grey = red * 0.32 + green * 0.57 + blue * 0.11
если grey > 0.5, то светлый. С альфой исходные RGB должны быть пересчитаны с учетом цвета подложки (background)