У меня есть приложение командной строки, написанное на C ++ и созданное с помощью gcc / make, которое работает на MacOS. Это приложение не имеет собственного графического интерфейса и не должно иметь корневых окон - это консольное приложение, предназначенное для управления другим приложением.
Однако в одной точке необходимо показать диалоговое окно выбора файла, что делает его немного гибридным.
Я использовал wxWidgets для создания диалога, но он не может получить ввод. Я видел в различных часто задаваемых вопросах и группах пользователей, что пакет, вероятно, требуется Когда я попытался создать пакет, это не решило проблему.
Вот как инициализируется wxWidgets:
#ifdef __WXMAC__
if (!wxEntryStart(argc, argv))
{
cout << "Failed to initialize wxWidgets." << endl;
return 0;
}
#endif
clientApp = new MainClass();
clientApp->Run(argc, argv);
#ifdef __WXMAC__
wxEntryCleanup();
#endif
Когда я пытаюсь показать диалог просмотра файлов, используя этот код, он показывает средство выбора файлов, но не отвечает, действуя так, как будто у него нет сообщения:
#ifdef __WXMAC__
wxFileDialog* dlg = new wxFileDialog( NULL, _("Upload File"), _(""), _(""),
_("All Files (*.*)|*.*"), wxFD_OPEN|wxFD_FILE_MUST_EXIST );
if (dlg->ShowModal() == wxID_CANCEL )
{
INFOLOG("File upload dialog has been cancelled." << endl )
return false;
}
#endif
Поскольку в часто задаваемых вопросах говорится, что создание пакета - это способ автоматически создать насос сообщений и сделать графический интерфейс отзывчивым. Я попытался создать пакет:
myapp.app
-> Содержание
-> MacOS
-> myapp (исполняемый файл)
-> cert.crt (SSL-сертификат, используемый приложением)
-> Ресурсы
-> myapp.icns
-> Info.plist (указывает на myapp как исполняемый файл и использует myapp.icns в качестве значка)
Приложение, контролирующее это, не принадлежит мне и должно запускаться именно так:
myapp
Управляющему приложению необходимо прочитать консольный вывод этого приложения, и именно поэтому это приложение предназначено только для консоли.
Поскольку исполняемый файл на несколько каталогов глубже, я попытался создать сценарий оболочки в корневом каталоге над пакетом для запуска приложения и вызова его myapp. Myapp просто запускает myapp.app/Contents/MacOS/myapp, перенаправляя параметры командной строки.
Это не сработало. Окно просмотра файлов создается и просто сидит там, давая мне вращающееся колесо радуги каждый раз, когда я на него намываю.
Что я могу сделать, чтобы запустить насос сообщений? Можно ли добавить вызов в код wxWidgets или мне нужно сделать что-то по-другому с пакетом? Запускает ли сценарий оболочки приложение, которое находится внутри пакета, полностью побеждает «магию прокачки сообщений», которую должен дать пакет, и если так, есть ли разумный обходной путь? Нужно ли мне просто создать своего рода псевдо-родителя для wxFileDialog?