Max1987 Опубликовано 19 июня, 2006 Жалоба Опубликовано 19 июня, 2006 Привет всем! Ситуация такая: есть проект на QT. Есть библиотека(mathprov.so) в которой содержится следующее: //libs.h #ifndef MYLIBS_H #define MYLIBS_H #ifdef Q_WS_WIN # define EXPORT __declspec(dllexport) #else # define EXPORT #endif void __attribute__ ((constructor)) initialize(void); void __attribute__ ((destructor)) finalize(void); #endif //mathprov.h #ifndef MATHPROV_H #define MATHPROV_H #include "../libs.h" class QWidget; class PartTypeDialog; QWidget* parent; PartTypeDialog* partTypeDialog; extern "C" { EXPORT void setParentWidget(QWidget* p); EXPORT QWidget* getPartTypeDialog(); } #endif //mathprov.cpp void initialize() { partTypeDialog = 0; } void finalize() { } QWidget* getPartTypeDialog() { if (partTypeDialog == 0) partTypeDialog = new PartTypeDialog(parent); return (QWidget*)partTypeDialog; } void setParentWidget(QWidget* p) { parent = p; } PartTypeDialog это некий наследник QWidget. Далее основная программа: //CourseWindow.h class CourseWindow : public QMainWindow { <...> QLibrary* libMathProv; QWorkspace* ws; }; //coursewindow.cpp CourseWindow::CourseWindow(QWidget *parent, const char *name) : QMainWindow(parent, name), libMathProv(0) { <...> ws = new QWorkspace( <...> ); ws->setScrollBarsEnabled( TRUE ); connect(ws, SIGNAL(windowActivated(QWidget*)), this, SLOT(ws_windowActivated(QWidget* ))); } void CourseWindow::ws_windowActivated ( QWidget * w ) { if (w == 0) //unload library libMathProv->unload(); } void CourseWindow::somefunc() { <...> lib = new QLibrary("mathprov"); lib->setAutoUnload(false); setParent = (psetparentfunc)lib->resolve( "setParentWidget" ); getDialog = (pgetdialogfunc)lib->resolve("getPartTypeDialog"); setParent(ws); getDialog()->show(); } Ошибка сегментации возникает когда закрываешь окно(PartTypeDialog) и предком является QWorkspace. А если выйти из моей проги не закрывая PartTypeDialog, или вместо PartTypeDialog использовать любой стандартный QT-шный класс(наследник QWidget), то ошибки не происходит. Вы можете объяснить такое явление??? Если даже PartTypeDialog выглядит так: class PartTypeDialog : public QWidget { Q_OBJECT public: PartTypeDialog(QWidget *parent = 0, const char *name = 0): QWidget(parent, name) }; -------- Заранее примного благодарен. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.