Leeds' Sky Bet Championship promotion hopes suffered a setback at Loftus Road as Luke Freeman's goal gave QPR a 1-0 victory.
Having dominated much of the first half, the visitors were undone three minutes into the second.
Massimo Luongo bulldozed his way down the right and cut the ball back for Freeman, who scored from close range with a deft flick.
It ended a seven-match losing run for Rangers, while Leeds, who would have gone top had they won, stay third.
Both sides threatened early on, with the fit-again Freeman shooting wide of the near post and Ebere Eze showing wonderful skill to breeze past Pablo Hernandez before shooting high and wide.
But after those promising attacks, Rangers found themselves on the back foot and might have had a penalty awarded against them when Toni Leistner raised an arm to block Patrick Bamford's shot.
Joe Lumley then came to the home side's rescue by pushing over Kalvin Phillips' near-post header from Ezgjan Alioski's right-wing corner.
And QPR had a lucky escape when a stretching Bamford was unable to add the finishing touch after Hernandez had laid the ball across the face of goal.
Having managed to get to the interval on level terms, Rangers capitalised when Leeds switched off after the restart.
Galvanised by the goal – Freeman's eighth of the season – QPR enjoyed a period of dominance similar to Leeds' in the first half and keeper Kiko Casilla produced three saves to prevent a second goal.
Casilla kept out Pawel Wszolek's header from Jake Bidwell's cross and denied Nahki Wells with a brilliant block when the ball ran to the striker after the outstanding Freeman had evaded two challenges near the edge of the penalty area.
Rangers continued to press and had appeals for a penalty waved away when Jordan Cousins went down under a challenge from Bamford.
After Casilla was called into action again, this time to push away a Freeman shot, Luongo sent a stunning left-footed volley from the resulting Freeman corner just over the bar.
Leeds eventually came on strong but substitute Barry Douglas missed a decent chance to equalise, blazing over after being found in space on the right of the box by Hernandez.
And Lumley kept them at bay with a superb triple save with 10 minutes remaining.
After the keeper had parried Stuart Dallas' shot and Bamford's follow-up, the ball ricocheted off Bamford but Lumley saved again.
ga('create', 'UA-72310761-1', 'auto', {'name': 'pacontentapi'});
ga('pacontentapi.set', 'referrer', location.origin);
ga('pacontentapi.set', 'dimension1', 'By Press Association Sport staff');
ga('pacontentapi.set', 'dimension2', 'd3728901-398b-4599-9773-4e0927c5b219');
ga('pacontentapi.set', 'dimension3', 'paservice:sport,paservice:sport:club-news,paservice:sport:football,paservice:sport:match-reports');
ga('pacontentapi.set', 'dimension6', 'story');
ga('pacontentapi.set', 'dimension7', 'composite');
ga('pacontentapi.set', 'dimension8', null);
ga('pacontentapi.set', 'dimension9', 'sport:football');
ga('pacontentapi.send', 'pageview', { 'location': location.href, 'page': (location.pathname + location.search + location.hash), 'title': 'Luke Freeman winner ends QPR\u2019s seven-match losing run'});