As a side note:
your naming convention is confusing, and specially in such cases of this sort, can lead to the problem you are having.
Your CameraThread object is not a thread, so don't call it "thread".
And having a cam_thread and CameraThread is confusing as well, specially when only one of these objects is a thread.

Now,
but I figured since the QTimer was supposedly in my new thread,
I think this is where the problem is.
The docs say (for moveToThread()):
Changes the thread affinity for this object and its children.
Your QTimer is a member, but no a child.
Cerate it on the heap with CameraThread as parent, and see if it changes things.