The gunman took a female cleaner hostage at a school before being killed by police. Two other police officers were also injured.
The man’s motive is not yet clear but the incident is being treated as terrorism.
Police sources quoted in local media said the man was heard shouting “Allahu Akbar” (“God is greatest” in Arabic).
Belgian broadcaster RTBF said the gunman was let out from prison on temporary release on Monday where he had been serving time on drug offenses. It said that he may have been radicalised while in jail.
The shooting unfolded late morning on Tuesday near a cafe in the city centre.
Prosecutors said the man followed and attacked police with a knife, before taking a gun from them and opening fire.
He also shot dead a man who was sitting in the passenger seat of a passing car.
The gunman then fled to a nearby school and briefly took a hostage.
Footage on social media showed people running to safety as several gunshots rang out. Children at the school were moved to safety.
Belgium’s Prime Minister Charles Michel said he was following the situation closely and expressed his support for those caught up in the shooting.
Belgium remains on alert after a series of jihadist attacks in the country and in neighbouring France.
A Brussels-based cell was involved in the 2015 Paris attacks which left 130 people dead in several locations.
Brussels itself saw three suicide bombings in March 2016, with 32 people killed. Both the Paris and Brussels attacks were claimed by the Islamic State-group.
Later in 2016 a man attacked two police officers with machetes while shouting “Allahu Akbar” before being shot dead.