$\mathbb Q$ is not the direct product of two non-trivial groups. I know this has been asked before, in a bunch of places, so I expect it to be closed as a duplicate at some point, but I'd like to know if my own proof works. If the proof is incorrect, please limit answers to pointing out the errors. If the proof is correct, then thoughts on improving it would be appreciated.

Prove that $\Bbb Q$ is not the direct product of two non-trivial groups.

—Aluffi exercise II.3.5.
My proof
Suppose that $\Bbb Q = G \times H$, neither $G$ nor $H$ trivial.
First note that $0_G$ is the only element of $G$ with finite order: If $m\ne 0$ and $m\cdot g=0_G$, then $m\cdot(g,0_H)=0_{G\times H}$, contradicting the fact that $\Bbb Q$ has no non-zero elements of finite order.
Suppose that for some $m\ne 0$ and some $n\ne 0$, $\pi_G(m/n)=0_G$. Then $0_G=n\cdot\pi_G\left(\frac m n\right)=\pi_G\left(n\cdot\frac m n\right)=\pi_G(m)=m\cdot\pi_G(1)$.
Since $\pi_G(1)$ has finite order, we conclude that $\pi_G(1)=0$. Since $\Bbb Z=\langle 1\rangle$, $\pi_G$ maps every integer to $0_G$.
Now let $a$ and $b$ be non-zero integers. Then $b\cdot\pi_G\left(\frac a b\right)=\pi_G\left(b\cdot \frac a b\right)=\pi_G(a)=0_G$. As above, this shows that $\pi_G\left(\frac a b\right)=0_G$.
Thus if $\pi_G$ is not an injective function, then it must map everything to $0_G$, so $G$ will be a trivial group. The same result holds for $\pi_H$. Since by assumption, $G$ and $H$ are non-trivial, $\pi_G$ and $\pi_H$ are both injective functions, which is of course impossible.

Yes, your proof is correct. You can avoid proof by contradiction though (which IMO is a good thing to do): write $\mathbb{Q} = G \times H$. WLOG $G$ is nontrivial. Then your argument shows that $\pi_G$ is injective, but its kernel is $0 \times H$, therefore $H$ is trivial. QED.
Is there a specific part of your proof that made you doubt whether it was correct?
