Что-то как-то совсем сложно) QtSingleApplication при запуске позволяет проверить, запущено ли уже это приложение.
В итоге все умещается примерно в
int main(int argc, char *argv[])
{
QtSingleApplication app(argc, argv, false);
if(app.isRunning()) {
//
app.sendMessage(передаем параметры из argv);
return 0;
}
ContextManager cm;
QTimer::singleShot(500, &cm, SLOT(timeout())); // подождали пол секунды и запустили главное приложение
QObject::connect(&app, SIGNAL(messageReceived(QString)), // накапливаем argv из всех запросов на запуск приложения
&cm, SLOT(messageReceived(QString)));
return app.exec();
}