You can refer to the following RFCs
The client can simply sign a transaction then ask a node doing the PoW job. the procedure is something like: create and sign message -> get tips -> send the message, see https://github.com/iotaledger/iota.c/blob/dev/src/client/api/v1/send_message.c#L254
I think Qt can use c client lib - iota.c. ...