This is a best practice question, and I expect the answer to be \"it depends\". I just hope to learn more real world scenarios and workflows.
First of all, I\'m talk
It seems like there's no more or better choices than the ones I listed in the question. So here they are again.
qrefresh before switching and rebuild after; tricky and risky if projects are not orthogonal.qqueue in 1.6+) per project.
qrefresh and qcommit before switching and rebuild after; feels complicated.Like always, there's no silver bullet, so pick and choose the one right for the job.
(UPDATE) For anyone who's in love with MQ, using MQ on top of regular branches (#2 + #3) is probably the most common and preferable practice.
If you have two concurrent projects with baseline on two branches (for example next release and current release), it's trivial to hop between them like this:
hg qnew; {coding}; hg qrefresh; {repeat}
hg qfinish -a
hg update -r
hg qimport -r ; {repeat}
For the last step, qimport should add a -a option to import a line of changesets at once. I hope Meister Geisler notices this :)