This is the only Qwilfish set you should be using, but it does so much for a team and will always satisfy your desires. Spikes is an instrumental support move, and Qwilfish is one of its best users in the metagame, as it gets numerous opportunities to switch in and set them up during the match thanks to Intimidate and its great defensive typing. Qwilfish also boasts the ability to beat most of the main spinners in the tier, as it can paralyze both defensive Cryogonal and Swords Dance Kabutops and use Waterfall to beat them. It also beats both Hitmonchan and Hitmonlee, provided the former isn't carrying Thunder Punch, although this isn't much of a feat as the two of them aren't very effective Rapid Spin users. Pain Split is an important move for Qwilfish, as it provides Qwilfish with some form of recovery, allowing it to perform its job even better. Waterfall is Qwilfish's STAB move, which prevents it from being Taunt bait against Pokemon such as Aerodactyl and helps it wear down Entei; it works especially well in combination with Thunder Wave, as your opponent will find it hard to get an attack off because of the effects of paralysis in addition to Waterfall's flinch chance.
Qwilfish has a plethora of utility moves at its disposal; however, there is only room for one of them. Thunder Wave is usually the best option, as it deters Pokemon like Sceptile, Galvantula, and Moltres from switching in, although the latter doesn't particularly like Waterfall either. It also clears the way for slower Pokemon such as Escavalier, Rhydon, and Magmortar to sweep. Taunt is more useful against defensive teams, as Qwilfish is faster than most other defensive Pokemon and can prevent them from healing or setting up entry hazards; Pokemon like Ferroseed, Clefable, and Mandibuzz are especially vulnerable to Taunt. Lastly, Haze is also a viable option, and it works wonders against setup sweepers with Substitute, particularly Klinklang, Crawdaunt, and Bulk Up Gallade. Each one has different uses for different teams, so it might require some experimentation to find exactly the right move.
16 Speed EVs are used to outspeed neutral-nature base 55 Speed Pokemon, such as Bouffalant and Golurk, and hit them with Waterfall, Taunt, or Thunder Wave. The remaining EVs increase Qwilfish's physical bulk as much as possible to cushion physical blows better in combination with Intimidate. However, Qwilfish can run a faster EV spread of 252 HP / 80 Def / 176 Spd with a Jolly nature in order to outrun Smeargle and Taunt it before it can make a move, crippling it. Explosion is also a good option on a faster Qwilfish over Pain Split, as it ensures that Qwilfish will go out with a bang in case a threatening sweeper such as Feraligatr attempts to set up. Toxic Spikes can be used as well, but they are largely ineffective in the current metagame due to the high number of common grounded Poison-types, such as Amoonguss, Drapion, Roselia, and opposing Qwilfish. Toxic can also be used, but is generally inferior to Qwilfish's other utility options, particularly Thunder Wave, as Qwilfish will be unable to stall out Toxic damage well against special attackers. Poison Jab is an alternate STAB move that can be used to hit Grass-types such as Sceptile, Rotom-C, and Lilligant on the switch-in, but it won't do enough damage due to the lack of investment, and Thunder Wave cripples them more anyway.
Qwilfish is very vulnerable to special attacks, so it requires a partner that will be able to take them well. Clefable and Cryogonal are two such partners, and each provides additional utility. Clefable provides Wish support when Qwilfish is too low on health to use Pain Split, while Cryogonal provides Rapid Spin support when Qwilfish has been forced out by an opposing entry hazard user. The combination of Qwilfish and either of these two is very hard to break because they synergize so well; they form the start of a good stall team. Grass-types are good partners too, even frailer ones, as Qwilfish is a hard stop to some of their biggest nightmares: Entei and Escavalier. Rotom is another great partner that can spinblock the hazards that Qwilfish sets up; it synergizes well and the two of them can wear down Kabutops quite easily. If using Thunder Wave, it's a good idea to use Pokemon that benefit from paralysis support, such as Tangrowth, Magmortar, and Rhydon. Qwilfish can be a very effective pivot for bulky offensive teams. Finally, powerful wallbreakers such as Moltres appreciate the damage from Spikes that racks up on their checks and allows them to sweep more easily.