Looks like QMessageBox::showEvent() forces it to fixed size according to various factors. One ugly way to work it around is:
class MyMessageBox : public QMessageBox
{
protected:
void showEvent(QShowEvent* event) {
QMessageBox::showEvent(event);
setFixedSize(640, 480);
}
};