This is simple to do in the QubeGUI. Submit the first cache pre-render job and make a note of its jobid.
This will work best if you submit the cache job in a "blocked" state, so that it doesn't start before the render job is submitted (how-to in a moment). This is because Qube's dependencies are event-based; a frame's render will be unblocked and ready to render when the corresponding's frames cache solve finishes, not is finished; the trigger is the transition from not-done->complete. If the first frame's cache solve has already finished by the time the render job is submitted, the first render frame's trigger condition will never be true (the event has been missed), and it will stay blocked forever.
To submit any job in a blocked state, check the "Blocked" checkbox in the Qube Advanced Job Control section of the submission UI.
When you submit the render job, go down to the Dependency field in the Qube Advanced Job Control section, click 'Add', and set the value to "link-complete-work-n", where n is the jobid from the cache job. When you select "-work-", it defines a frame->frame dependency between two jobs. Select "-job-", and you get a job->job dependency.
Once the render job has been submitted, you can then unblock the cache job by selecting it in the QubeGUI job list, right-mouse->Unblock.
The render job will automatically be submitted in a blocked state, but you should not unblock this yourself. Qube will unblock each frame in the render job as the corresponding frame in the cache job finishes.