Aiden McGeady scored twice as Brentford were beaten at Deepdale.
Tom Field headed the Bees into an early lead, but McGeady equalised with a 20-yard strike and Callum Robinson put the hosts ahead.
McGeady curled home his second before Daryl Horgan made it 3-1.
Maxime Colin scored a late consolation for Brentford when his deflected shot went in off the crossbar.
Lasse Vibe hit the post during a second-half spell in which Brentford threatened, but there was no back.
The defeat means the Bees drop to 15th in the Championship table.