@Perdrix
As I suggested elsewhere, I believe you just want 4 spinboxes: hours, minutes, seconds, milliseconds. Or something close. QSpinBoxes have a minimum and a maximum, so that is your validation done. I am unconvinced that you want "wrap" from one spinbox to the next (does QDateTimeEdit even do that??), though it can be added.
As I also commented elsewhere, a QDateTimeEdit ( or QDateTime type) is not the right type for your requirement. (Handling date entry/exit is the largest part of "the QDateTimeEdit code would not be the size that it is.".) You want a duration. These two do not deliver that, they deliver a "point in time". Your desired return type might be a QTime, but it might well be easier for your case to return some (long) integer. If you did that you could easily handle you expressed desire elsewhere (IIRC?) for potentially supporting nanoseconds. Note that QElapsedTimer, the one Qt class which supports a time duration, uses a qint64 as the fundamental data type, not a time-type, and also supports nanoseconds if wanted. You really want a QElapsedTimerEdit.
Let us know if you find a Qt widget which does just what you want instead of writing it yourself.