[Interest] Two QCoreApplication objects with a twist

Thiago Macieira thiago.macieira at intel.com
Fri Nov 17 17:11:07 CET 2017


On sexta-feira, 17 de novembro de 2017 00:17:29 PST Lorenz Haas wrote:
> you can't use two QCoreApplication instances in a single application,
> I know. There's also a nice warning:
> https://github.com/qt/qtbase/blob/5.10/src/corelib/kernel/qcoreapplication.c
> pp#L795. The reason, I guess, has to do with the static variables used in
> QCA (?).

And all the other "static" variables stored in QCoreApplicationPrivate and 
derived classes.

> Now, however, please imagine the following scenario and please be
> assured that I am neither convinced by nor advising such an
> architecture:
> 
> - Win32 based
> - Main Application uses Qt5 with QApplication
> - Shared library linked against Qt4 (Core)
> - Qt5-Application uses the library
> - This Qt4-linked library starts an Qt4-QCoreApplication (for being
> able to use Signal/Slots).

Signals and slots do not require QCoreApplication.

> What are the technical reasons why you should also not do that, if
> there are? ... because static variables do not count in that scenario,
> at least I think so.

You may need to do that if you have a plugin or a library component from a 
third party whose sources you do not control. The above situation could happen 
actually more commonly on Linux, where loading certain non-Qt libraries may 
cause in turn Qt 4 to be loaded because it was expected to be there.

On Linux, the above is a recipe for disastaer. The best outcome is that it 
will quickly crash.

On Windows, however, it is possible to load two libraries that have the same 
symbols, since the symbol import tables name which DLLs to import the symbols 
from. So a Qt5 DLL will not accidentally find Qt4 and vice-versa.

Your problem will be the event loops. On Unix systems, I know they won't 
integrate with each other. On Windows... I don't know.

I personally do not recommend the above situation, but it may work.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Interest mailing list