More than one instance of QApplication?

  • According to the API doc, one can not create more than one instance of QApplication.
    However, the following code snippet shows one can have more than one instances
    of QApplication.
    QApplication app(argc, argv);
    QApplication *pApp = new QApplication(argc, argv);
    qDebug() << (pApp == &app); // false
    qDebug() << (QApplication::instance() == &app); // false
    qDebug() << (QApplication::instance() == pApp); // true
    qDebug() << (QApplication::instance() == qApp); // true

    Actually, QApplication::instance() always refers to the latest created instance.

    Why don't make QApplication a real "singleton"?

  • Moderators

    The documentation is correct -- if you create more than one object yourself, you get undefined behaviour (like what you're seeing).

    QApplication is a subclass of QGuiApplication, which is a subclass of QCoreApplication. qApp is a QCoreApplication pointer.

    Singletons and subclassing don't mix nicely -- QApplication's constructor will also construct a QGuiApplication and a QCoreApplication behind the scenes. Now we have 3 "objects", not a singleton.

  • Hi, I think you should get a compile error if your project is in Debug mode.

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.