The Hoops went into the game on the back of an 11-game unbeaten run and with an eight-point lead at the top of the table.
- Championship Results
- League One Results
- League Two Results
But after Steve Morison had slammed in his 14th goal of the season, Neil Warnock's side were reduced to 10 men as Danny Shittu saw red for bringing down Morison and Liam Trotter made the points safe from the penalty spot.
The Lions made three changes from the side that slumped to a 1-0 defeat at Watford at the weekend.
Winger Andros Townsend was given his debut after signing on loan from Tottenham and defender Darren Ward and striker Neil Harris also started.
Kaspars Gorkss came in for the injured Fitz Hall as QPR made one change from the team which claimed a 1-0 win against Leicester on Saturday.
QPR made a bright start, with Adel Taarabt's free-kick from the left picking out Clint Hill, but his close-range header was tipped around the post by David Forde.
The same pair combined again from the resulting corner, but this time Hill headed well wide.
Millwall settled and after Alan Dunne had sent a header over the crossbar, Morison let fly with a drilled effort from 25 yards which Paddy Kenny did well to hold.
Tamika Mkandawire was wayward from distance and Taarabt saw a shot blocked by Paul Robinson on the half hour as the game switched from end to end.
The best chance of the half fell to Morison in the box in the 40th minute, but his fierce drive was somehow kept out by Kenny.
Taarabt let the ball bounce before heading goalwards at the start of the second half, with Forde comfortably gathering.
Millwall responded and Paul Robinson should have done better with a near-post header from a Townsend corner but he failed to trouble Kenny.
But the home side still took the lead in the 63rd minute. Mkandawire played the ball through for Morison, who outpaced Gorkss and slammed the ball home on the volley.
Millwall immediately replaced Harris with Kevin Lisbie and the diminutive forward was straight into the action, firing wide from 12 yards.
QPR made a double substitution in the 71st minute, with Ishmael Miller and Tommy Smith coming on for Akos Buzsaky and Taarabt.
But they found themselves two goals and a man down shortly afterwards.
Shittu fouled Morison, who went on to score, but referee Steve Tanner had already blown for a penalty. Shittu was sent off and Trotter stepped up to fire home the spot-kick.
The lively Townsend could have made it three but shot wide from six yards, while Morison forced another superb save from Kenny at the death as Millwall comfortably held on.