Hi,
That looks very interesting.
After glancing over the code very quickly i have some comments for you.
- First of all, why didn't you posted your repository url? (https://github.com/sddm)
- You are using Qt, but it seems like you prefer plains C++? Since you use a lot of things that Qt also has. For inctance, std::cerr = qError(...). QProcess can execute a command for you. QCoreApplication::arguments(); gets a QStringList of command line arguments. and there is much more like this. Your code can be a lot cleaner if you where to use that.
- You are using XLib directly. While this might be needed for your case, i do encourage you to write an abstraction layer. The current stuff is still X11, but wayland is really going forward now and in not too many years we well certainly see applications/desktop environments working in there. If you where to have an abstraction than porting SDDM to wayland would be "relatively" easy.
Just some comments thus far

Good luck developing this further, it looks interesting!