I just tried specifically setting the messagebox icon with this change to your code :
Code:
def critical_button_clicked(self):
print "Critical pressed..."
msg = QMessageBox(self)
msg.setIconPixmap(QPixmap("/usr/share/icons/oxygen/22x22/actions/dialog-cancel.png"))
msg.exec_()
This worked in the Oxygen widget style setting of KDE4 so it must have something odd going on in the build of QT/KDE or perhaps the PyQT4 package of Slackware as it works in Kubuntu. It may be worth reporting this to Pat as that's the idea of current in the first place !
Addendum: OK - I wouldn't report it to Pat just yet. I just tried the same thing in OpenSuse and I couldn't get any icons to display under any widget style setting whatsoever! Possibly a KDE bug after all. Maybe Kubuntu has fixed this or applied some update.