2013-11-28 3 views
2

У меня есть библиотека C++, и я планирую добавить к ней необязательную функцию (включенную макросом), чтобы показать дополнительную информацию об отладке. Идея состоит в том, чтобы создать и открыть окно с Qt для отображения некоторых данных. Моя проблема в том, что у меня нет доступа к основной функции (это библиотека), поэтому я не могу создатьобъект Qt. Я попытался создать глобальные объекты, как это:Упростите QApplication за пределами основной функции (библиотека)

static int argc = 1; 
static char argv[1][6] = {"myapp"}; 
static QApplication app(argc, (char**)argv); 

Это работает, но сбой при выходе (на ~QApplication()).

Другим вариантом будет выделение объекта в кучу и использование новых методов API для инициализации/завершения работы библиотеки. Но я вообще не хочу менять API.

Еще один будет выделяться в кучу в первый раз, когда мне нужно открыть окно и просто пропустить его. Но это не кажется хорошей идеей.

Любые идеи?

Я использую Qt 5.1 с GCC 4.8, ориентированным на Windows и Linux.

+0

'QApplication :: instance()' предоставит вам доступ к той, которая определена в основном (если таковая имеется), как QCoreApplication –

+0

Дело в том, что я не хочу заставлять пользователей библиотеки добавлять что-то их основной (или даже вообще Qt). –

+0

вам понадобится поток для цикла событий, который необходимо будет остановить, когда приложение остановится –

ответ

0

Another option would be allocate the object on heap and have new API methods to initialize/finalize the library. But I don't want to change the API at all. - ну не пропустите его, у вас есть глобальный куча выделенного объекта и создайте его, когда кто-то прикрепится к библиотеке и уничтожит, когда отделится атташе. И да, точка в потоке также на 100% правильна, поскольку добавление/отсоединение происходит только от вызывающего потока, и вы не можете заблокировать это, вы, скорее всего, захотите создать новый поток, выделите QApplication там, возможно даже в локальном стеке потоков, и звоните run().

Смежные вопросы