QMessagebox kill program if parent QWidget is hidden. (Qt 4.6)

main.cpp
Qt Code:
  1. #include <QtGui/QApplication>
  2. #include "widget.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. Widget w;
  8. w.show();
  9. //w.hide(); // #1
  10. return a.exec();
  11. }
To copy to clipboard, switch view to plain text mode 

widget.cpp
Qt Code:
  1. #include "widget.h"
  2. #include <QApplication>
  3. #include <QAction>
  4. #include <QSystemTrayIcon>
  5. #include <QMenu>
  6.  
  7. Widget::Widget(QWidget *parent)
  8. : QWidget(parent)
  9. {
  10. QAction *aboutQtAction = new QAction(tr("&About Qt"), this);
  11. QObject::connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
  12. QMenu *trayMenu = new QMenu(this);
  13. trayMenu->addAction(aboutQtAction);
  14. QSystemTrayIcon *trayIcon = new QSystemTrayIcon(this);
  15. trayIcon->setContextMenu(trayMenu);
  16. trayIcon->show();
  17.  
  18. //setWindowFlags(Qt::Desktop); // #2
  19. }
To copy to clipboard, switch view to plain text mode 

widget.h
Qt Code:
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3.  
  4. #include <QtGui/QWidget>
  5.  
  6. class Widget : public QWidget
  7. {
  8. Q_OBJECT
  9.  
  10. public:
  11. Widget(QWidget *parent = 0);
  12. ~Widget();
  13. };
  14.  
  15. #endif // WIDGET_H
To copy to clipboard, switch view to plain text mode 

If line #1 or #2 uncommented, when I close QMessagebox (aboutQt in this example), my program crashes.

Why my program crashes and how can I fix it?