Я пытаюсь использовать wxWidgets для создания окна открытия/сохранения FileDialog в кросс-платформенном виде. Поэтому я рассмотрел примеры в the documentation. Я также хочу создавать автономные окна без родителя, потому что я не использую какой-либо другой экземпляр wxApp/wxWindow в другом месте моей программы.Автономное окно FileDialog с wxWidgets
Кроме того, мне нужно иметь свою собственную функцию main
, поэтому я не хочу использовать макрос, такой как IMPLEMENT_APP
. Я пытался следовать указаниям here, и придумал следующую минимальную программу:
#include <wx/wx.h>
#include <string>
#include <iostream>
std::string openFile() {
wxFileDialog openFileDialog(NULL, _("Open XYZ file"), "", "",
"XYZ files (*.xyz)|*.xyz", wxFD_OPEN|wxFD_FILE_MUST_EXIST);
if (openFileDialog.Show() == wxID_CANCEL)
return ""; // the user changed idea...
// proceed loading the file chosen by the user;
return "something";
}
int main(int argc, char *argv[]) {
std::cout << wxEntryStart(argc, argv) << std::endl;
std::string s = openFile();
wxEntryCleanup();
}
А вот CMakeLists.txt я компилировать код:
CMake_Minimum_Required(VERSION 2.8.11)
Project(test)
Find_Package(wxWidgets REQUIRED)
Include(${wxWidgets_USE_FILE})
Add_Executable(test main.cpp)
Target_Link_Libraries(test ${wxWidgets_LIBRARIES})
Тем не менее, когда я запустите эту программу, я получаю Ошибка сегментации, несмотря на то, что wxEntryStart
возвращает true
, и я понятия не имею, откуда эта проблема. Любой отзыв?
Начните с создания отладочной версии и запустите в отладчике, чтобы увидеть * где * произошел сбой. –
Он больше не разбивается, если я предшествую вызову 'wxEntryStart' линией, содержащей' wxApp :: SetInstance (новый wxApp()); '. Однако, когда я запускаю программу, окно не запрашивается, а строка 'openFileDialog.Show()' немедленно возвращается ('openFile' возвращает' 'что-то"). – skuld