Russian Qt Forum

Qt => Общие вопросы => Тема начата: IGHOR от Апрель 04, 2010, 02:16



Название: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: IGHOR от Апрель 04, 2010, 02:16
Пытаюсь сделать Shared DLL в котором будут сохраняться стандартные диалоги.
Раньше с DLL не работал, потому прошу помощи разобраться, может я что-то не так делаю.
Пользуюсь сборкой Qt отсюда http://qt.nokia.com/downloads/windows-cpp-vs2008

значит создаю в библиотеке пустой виджет унаследованный от QDialog, бросаю на него любые объекты и объединяю их лейаутом..
создаю программу для теста, подключаю в нее либу делаю кнопку по которой создаеться этот диалог и вызываеться exec().
После создания обьекта при попытке удалить объект класса прога вылетает с ошибкой.

Заметил что все работает если закоментировать ui.setupUi(this); но пройдя дебагером по функции setupUi не получаю ошибок.
могу попробовать создавать все объекты вручную, но объектов много и удобнее их редактировать через ui и еще хотелось бы понять в чем причина.
Прилагаю пример длл и программы в прикреплениях.

DLL импортирую так:
Код:
#ifndef SHAREDDLL_GLOBAL_H
#define SHAREDDLL_GLOBAL_H

#include <Qt/qglobal.h>

#ifdef SHAREDDLL_LIB
# define SHAREDDLL_EXPORT Q_DECL_EXPORT
#else
# define SHAREDDLL_EXPORT Q_DECL_IMPORT
#endif

#include <QDialog>

class SomeDialog : public QDialog
{
public:
SHAREDDLL_EXPORT SomeDialog(QWidget *parent = 0);
};

#endif // SHAREDDLL_GLOBAL_H


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: Авварон от Апрель 04, 2010, 09:26
класс уи кто создавать будет?


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: Zmeishe от Апрель 04, 2010, 11:15
Почему так
Код:
class SomeDialog : public QDialog
{
public:
SHAREDDLL_EXPORT SomeDialog(QWidget *parent = 0);
};

а не так
Код:
class SHAREDDLL_EXPORT SomeDialog : public QDialog
{
public:
SomeDialog(QWidget *parent = 0);
};

??


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: IGHOR от Апрель 04, 2010, 18:22
Zmeishe, и так то же самое, конструктор создается и диалог появляется но после закрытия и уничтожения ошибка без описания.
Авварон, а класс уи приватный и генерирует виджеты в конструкторе, и не виден из программы которая подключает длл, разве так нельзя?
можете скомпилировать кто-нибудь будет ли у вас ошибка


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: Авварон от Апрель 04, 2010, 19:42
а, уи не по указателю, извиняюсь...


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: mozgofil от Апрель 18, 2010, 16:27
Zmeishe, и так то же самое, конструктор создается и диалог появляется но после закрытия и уничтожения ошибка без описания.
Авварон, а класс уи приватный и генерирует виджеты в конструкторе, и не виден из программы которая подключает длл, разве так нельзя?
можете скомпилировать кто-нибудь будет ли у вас ошибка
вообще, только последний вариант правильный.
пересобери всё и добавь деструктор

ЗЫ:
а вообще ты не правильно делаешь : нужно 1 солюшн создавать и в него уже добавлять
проект длл и тестовое приложение, чтобы их вместе дебажить


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: IGHOR от Апрель 18, 2010, 21:05
вообще, только последний вариант правильный.
Это какой последний?

ЗЫ:
а вообще ты не правильно делаешь : нужно 1 солюшн создавать и в него уже добавлять
проект длл и тестовое приложение, чтобы их вместе дебажить
А это попробую, спасибо


Название: Re: Невозможно удалить класс унаследованный из QDialog определенный в Shared DLL
Отправлено: mozgofil от Апрель 19, 2010, 18:44
вообще, только последний вариант правильный.
Это какой последний?
class SHAREDDLL_EXPORT SomeDialog : public QDialog