Winnall joined the youth ranks of Wolverhampton Wanderers as a teenager, before signing professional forms in May 2009. He recovered from a cruciate knee injury to make his senior debut on 24 August 2010 in a League Cup victory over Southend United, which was to be his only Wolves first team appearance. In February 2011 he moved on a month's loan to League Two side Burton Albion, later extended to the end of the season after a run of four goals in six appearances. The striker went out on loan again, joining League Two side Hereford United on a month's loan from 26 August. After returning to Wolves at its conclusion, he moved on loan again in January 2012, to join Scottish Premier League side Inverness Caledonian Thistle for the rest of the season. During pre-season for the 2012–13 season Winnall was given permission to undergo a trial with Preston North End but was not offered a contract. Instead his next move was a loan at League One club Shrewsbury Town whom he joined in a one-month deal on 28 September 2012. At the end of the 2012–13 season his contract with Wolves expired and was not renewed, meaning the striker left the club having made only one first team appearance during his time at Molineux.
Following a successful trial spell during pre-season, he subsequently signed for League Two club Scunthorpe United in a one-year deal, scoring on his debut on 3 August 2013 against Mansfield Town. He was both Scunthorpe's and League Two's leading scorer in 2013–2014, and was nominated for the latter's Player of the Year Award in March 2014. Scunthorpe took up a one-year option on his contract in May 2014, extending his deal until 2015. At the same time, Winnall was offered a new contract which – according to Scunthorpe chairman Peter Swann – was a "vast improvement" on his current deal. Swann said: "It's important that the fans know that we do rate him and that we want him to stay here."
On 23 July 2014, Winnall signed for fellow League One club Barnsley for an undisclosed fee. He scored his first goal for the club on 23 August in a 4–1 win at home to Gillingham. On 8 November 2014, Winnall scored his first senior hat trick, in Barnsley's 5–0 FA cup first round win over Burton Albion. On 28 January2016, Barnsley rejected an offer for Winnall from Championship club Leeds United. Winnall remained at Barnsley and he played a big part in Barnsley's season, including beating Oxford United 3–2 to win the Football League Trophy on 3 April 2016. On 14 May 2016, Winnall's double helped keep Barnsley on course for a return trip to Wembley as a 3–0 first-leg win against Walsall gave them a big advantage in their League One play-off semi-finals. Barnsley went on to beat Walsall 6–1 on aggregate, and then beat Millwall 3–1 in the play-off final at Wembley Stadium to earn promotion to the Championship. He scored 24 goals in all competition, with 23 of them league goals for Barnsley, and contributed 8 assists during the 2015–16 season and finished as the third highest goalscorer in League One behind Will Grigg and Nicky Ajose.
Sheffield Wednesday
On 13 January 2017, Winnall signed for fellow Championship team Sheffield Wednesday. He scored his first goal for Wednesday in a 3–0 win against Birmingham City on 10 February 2017. In a heated return to Oakwell in April, Winnall scored the opening goal against former club Barnsley. On 31 August 2017, Winnall joined Derby County as part of a loan swap deal for midfielder Jacob Butterfield. He scored his first goal for Derby in a 1–1 draw with Birmingham City on 23 September 2017. On 24 June 2020, it was announced that he wasn't offered a new contract and would be leaving the club on the 30 June.